0

我试图让我的 Preference 类别标题与我的应用程序的主题保持一致,所以在搜索 SO 和我关注的一些博客之后..我发现最好(也是最简单)的方法就是创建一个自定义 Preference覆盖 onCreateView() 或 onBindView() 并以编程方式设置类别 TextView 的颜色及其背景的类别类。听起来很容易。

我唯一的两个警告是我使用的是 SherlockPreferenceActivity,因此我不能简单地将自定义主题应用到我的 Activity,因为我必须使用 Sherlock 主题或衍生主题。另外,我的另一件事(我认为这可能是原因)是我正在尝试将 TextView 的背景设置为 Shape Drawable,它是 xml 中带有笔划的渐变。偏好类别的背景变化得很好,但我根本看不到任何 TextView,这让我认为背景可能是在它的 textView 之上绘制的?我不确定

这是我的 CustomPreferenceCategory 类的代码。如您所见,我使用 onBindView() 和 onCreateView() 都进行了尝试。

public class CustomPreferenceCategory extends PreferenceCategory {



public CustomPreferenceCategory(Context context) {
    super(context);



}

public CustomPreferenceCategory(Context context, AttributeSet attrs) {
    super(context);



}

public CustomPreferenceCategory(Context context, AttributeSet attrs,
        int defStyle) {
    super(context);



}


 @Override
    protected void onBindView(View view) {
        super.onBindView(view);
        TextView titleView = (TextView) view.findViewById(android.R.id.title);
        titleView.setBackgroundResource(R.drawable.header_non_rounded);
        titleView.setTextColor(Color.WHITE);

    }



//@Override
/*protected View onCreateView(ViewGroup parent) {
    // And it's just a TextView!
    TextView categoryTitle = (TextView) super.onCreateView(parent);
    categoryTitle.setBackgroundResource(R.drawable.header_non_rounded);
    categoryTitle.setTextColor(Color.WHITE);



    return categoryTitle;
}*/

}

这是我通过我的preferences.xml 文件设置它的方式

<com.brightr.weathermate.views.CustomPreferenceCategory android:title="Weather"      >
    <CheckBoxPreference
        android:defaultValue="true"
        android:key="degreesC"
        android:summary="Display the weather degrees in Celsius units"
        android:title="Show Celsius" />
    <CheckBoxPreference
        android:defaultValue="true"
        android:key="degreesF"
        android:summary="Display the weather in Farenheit units"
        android:title="Show Farenheit" />

    <ListPreference
        android:entries="@array/textColors"
        android:entryValues="@array/textColor_values"
        android:summary="Change the color of the temerature text"
        android:title="Temperature Text Color" />
</com.brightr.weathermate.views.CustomPreferenceCategory>

关于为什么只更改背景但 TextView 不可见的任何想法?此外,即使我使用 setBackgroundResource() 而不是 setBackgroundDrawable(),它仍然没有设置文本。任何帮助将不胜感激。

4

1 回答 1

0

知道了。愚蠢的我,我忘了在每个构造函数中传递另外两个参数。我想踢自己。

public CustomPreferenceCategory(Context context) {
super(context);



}

public CustomPreferenceCategory(Context context, AttributeSet attrs) {
super(context, attrs);



}

public CustomPreferenceCategory(Context context, AttributeSet attrs,
    int defStyle) {
super(context, attrs, defStyle);



}
于 2013-01-30T01:13:29.590 回答