Я взял идею Удиника, но немного улучшил ее.Теперь можно установить цвет (в данном случае) PreferenceCategory в любое время, а не только при накачивании вида.
Как это сделать?
Сначала создайте свой собственныйкласс, такой как этот:
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);
}
}
Как только это будет сделано, вы должны использовать его при определении своих настроек в XML.
После того, как вам просто нужно будет использовать этот цикл в java preferenceActivity:
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);
}
}
Вот идея.Вы можете сделать это для любых ваших настроек и в любое время.Макет должен быть полностью загружен перед использованием этого кода, потому что в противном случае getListView (). GetCount () вернет 0. Я не буду работать, если вы используете его в onCreate для примера.Если вы хотите сделать это при запуске, я предлагаю вам сделать это в методе onWindowFocusChanged.