Изменить цвет текста PreferenceActivity - PullRequest
7 голосов
/ 06 апреля 2011

Я хочу изменить вид экрана настроек моего приложения Android на темный цвет текста. Как я могу это сделать? (Я уже поменял фон на белый цвет)

Ответы [ 2 ]

15 голосов
/ 07 апреля 2011

Я предполагаю, что вы используете действие, которое расширяет PreferenceActivity. Вы можете использовать метод setTheme, чтобы установить собственную тему на своем экране предпочтений. Просто определите один в res/values/themes.xml.

Это будет выглядеть так:

<?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> 

Затем установите его в своей деятельности:

setTheme(R.style.Theme_DarkText);
0 голосов
/ 19 декабря 2012

Я взял идею Удиника, но немного улучшил ее.Теперь можно установить цвет (в данном случае) 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.

...