2011-04-06 24 views

cevap

14

PreferenceActivity'u genişleten bir Etkinlik kullandığınızı varsayalım. Tercih ekranınızda özel bir tema ayarlamak için setTheme yöntemini kullanabilirsiniz. Sadece birini res/values/themes.xml'da tanımlayın.

Bu şuna benzer:

<?xml version="1.0" encoding="UTF-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <style name="Theme.DarkText"> 
    <item name="android:textColor">#000000</item> 
    </style> 
</resources> 

Ardından Faaliyetinizdeki ayarlayın:

setTheme(R.style.Theme_DarkText); 
+0

Metin rengini değiştirmek isterseniz * sonra * düzen oluşturulur? –

+0

@MarioB Bu kod, EditTextPreference dışındaki tercihlerin başlık metni rengini değiştirebilir. EditTextPreference'ın başlığının adı (iletişim başlığı değil) adı nedir? – shantanu

0

Ben Udinic fikrini aldı, ama bunu biraz düzeldi. Artık (bu durumda) PreferenceCategory öğesinin rengini, yalnızca görünümü şişirirken değil, herhangi bir zamanda ayarlamak mümkündür.

Nasıl Yapılır?

Birincisi, bunun gibi özelleştirilmiş bir sınıf oluşturmak: o yapılır

import android.content.Context; 
import android.preference.PreferenceCategory; 
import android.util.AttributeSet; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class MyPreferenceCategory extends PreferenceCategory { 

private TextView categoryTitle; 

public PincardPreferenceCategory(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
} 

public PincardPreferenceCategory(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
} 

public PincardPreferenceCategory(Context context, AttributeSet attrs, 
     int defStyle) { 
    super(context, attrs, defStyle); 
    // TODO Auto-generated constructor stub 
} 


@Override 
protected View onCreateView(ViewGroup parent) { 
    categoryTitle = (TextView)super.onCreateView(parent); 
    return categoryTitle; 
} 


public void setBackgroundColor(int color) { 
    categoryTitle.setBackgroundColor(color); 
} 


public void setTextColor(int color) { 
    categoryTitle.setTextColor(color); 
} 

} 

sonra, XML ayarlarınızı tanımlarken kullanmak zorunda.

Eğer sadece java preferenceActivity bu döngü kullanmak zorunda sonra: İşte

for (int i = 0; i < getListView().getCount(); i++) { 
     Object view = getListView().getItemAtPosition(i); 
     if (view instanceof PincardPreferenceCategory) { 
      ((PincardPreferenceCategory)view).setBackgroundColor(Color.BLUE); 
      ((PincardPreferenceCategory)view).setTextColor(Color.RED); 
     } 
    } 

fikirdir. Herhangi bir ayarınızda ve istediğiniz zaman bunu yapabilirsiniz. Düzeni, bu kodu kullanmadan önce tamamen yüklenmiş olmalıdır, aksi halde getListView(). GetCount() 0 değerini döndürür. Eğer başlangıçta bunu yapmak istiyorsanız, bunu onWindowFocusChanged yönteminde yapmanızı öneririm.

+0

Ekranın sığabileceği daha fazla öğe olduğunda işe yaramaz, çünkü ListView görünümü geri dönüşümü gerçekleştirir ve * all * görüntüleme oluşturmaz –