我正在努力让我的Preference类别标题与我的应用程序的主题保持一致,所以在搜索了SO和一些博客之后我跟着..我发现最好(也是最简单)的方法就是创建一个自定义的Preference Category类,它覆盖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(),它仍然不设置文本。任何帮助都会非常感谢大家。
答案 0 :(得分: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);
}