2011-12-22 24 views
5

3.112 üzerinde EditText içeren bir Activity var. Kullanıcı girişine dayanarak, EditText'teki metnin rengini değiştiririm (bir hata için kırmızı) ve metin tamamlandığında siyahı sıfırlar.Bir EditText'in "varsayılan" renk değerini temadan alın

Sorunlardan biri, Etkinlik'in genel temasının değiştirilmesiyle ilgilidir. Örneğin, ışık temasından gelen normal karanlık temasa geçmek, siyah bir metnin siyah bir arka plana karşı gösterilmesine neden olur - bu nedenle, veriye tamamlandığında metni yerine beyaza sıfırlamak yerine kodu girip değiştirmem gerekir.

Bu temayı değiştirmek yerine, etkinliğe bir tema değişikliği yaparsam, belirli bir tema için varsayılan EditText metin rengini programlı olarak çekmenin bir yolu olup olmadığını merak ettim, sonra metni tekrar değiştirebilirim beyaz, siyah, vb. için kodlama yerine varsayılan renk olarak.

cevap

8

R.attr'u kullanın. Eğer rengini değiştirerek önce bunları almak durumunda

setTextColor(android.R.attr.editTextColor) 
+0

Bu iyi, ancak sadece Honeycomb ve forward için – Panthro

+1

Bu öznitelikte öznitelik özümlenmemeli mi? http://stackoverflow.com/a/23543990/1245231 – petrsyn

7

Theme's docs'a göre rengi doğrudan obtainStyledAttributes kullanarak alın.

TypedArray themeArray = context.getTheme().obtainStyledAttributes(new int[] {android.R.attr.editTextColor}); 
try { 
    int index = 0; 
    int defaultColourValue = 0; 
    int editTextColour = themeArray.getColor(index, defaultColourValue); 
} 
finally 
{ 
    // Calling recycle() is important. Especially if you use alot of TypedArrays 
    // http://stackoverflow.com/a/13805641/8524 
    themeArray.recycle(); 
} 
+1

Bitirdiğinizden sonra TypedArray öğesinde 'recycle()' öğesini çağırmayı unutmayın. – iamreptar

İlgili konular