我想在我的偏好屏幕上做一些事情。
首先,我从CheckBoxPreference开始。 要应用自定义字体,我制作myCheckBoxPreference。
public class MyCheckBoxPreference extends CheckBoxPreference {
public String robotoRegular = "fonts/Roboto-Regular.ttf";
public MyCheckBoxPreference(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MyCheckBoxPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyCheckBoxPreference(Context context) {
super(context);
}
@Override
protected View onCreateView(ViewGroup parent) {
View view = super.onCreateView(parent);
TextView titleView = (TextView) view.findViewById(android.R.id.title);
Typeface tf = Typeface.createFromAsset(view.getContext().getAssets(), robotoRegular);
titleView.setTypeface(tf);
return view;
}
}
它工作正常。
要更改复选框图像,我制作了一个主题并应用它。
在我的styles.xml中
<style name="MyTheme" parent="Theme.Sherlock.Light">
<item name="android:checkboxStyle">@style/MyCheckbox</item>
</style>
<style name="MyCheckbox" parent="android:Widget.CompoundButton.CheckBox">
<item name="android:button">@drawable/btn_check</item>
</style>
要更改首选项列表的背景颜色,我还制作了一个主题并应用它。
<style name="MyTheme" parent="Theme.Sherlock.Light">
<item name="android:checkboxStyle">@style/MyCheckbox</item>
<item name="android:listViewStyle">@style/MyListView</item>
</style>
<style name="MyListView" parent="android:Widget.ListView.White">
<item name="android:listSelector">@drawable/list_selector_background</item>
</style>
它也很好用。
但我不得不动态更改字体。 我尝试使用主题
<style name="MyTheme" parent="Theme.Sherlock.Light">
<item name="android:textColorPrimary">#717171</item>
<item name="android:textColorPrimaryInverse">#FFFFFF</item>
<item name="android:textColorPrimaryDisableOnly">#dcdcdc</item>
</style>
但没有奏效。
我尝试在MyCheckBoxPreference中使用onTouchListener。 现在MyCheckBoxPreference.java中的onCreateView变为如下
@Override
protected View onCreateView(ViewGroup parent) {
View view = super.onCreateView(parent);
TextView titleView = (TextView) view.findViewById(android.R.id.title);
Typeface tf = Typeface.createFromAsset(view.getContext().getAssets(), robotoRegular);
titleView.setTypeface(tf);
titleView.setTextColor(0xFF717171);
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
TextView titleView = (TextView) v.findViewById(android.R.id.title);
int actionMasked = event.getActionMasked();
switch (actionMasked)
{
case MotionEvent.ACTION_DOWN:
{
titleView.setTextColor(0xFFFFFFFF);
break;
}
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
{
titleView.setTextColor(0xFF717171);
break;
}
default:
{
Log.d("MyCheckBoxPreference", "action" + event);
}
}
return false;
}
});
return view;
}
起初,它似乎有效,但它有问题。
如果我触摸某个项目并将我的手指移动到另一个项目,则字体颜色将保持白色(0xFFFFFFFF
)。
在该代码中,标题文字颜色在#717171
中首先设置onCreateView
。选择列表项后,onTouch中的颜色会随MotionEvent.ACTION_DOWN
更改。我希望当我取消选中项目MotionEvent.ACTION_UP
或MotionEvent.ACTION_CANCEL
时,将字体颜色设为#717171
。但是,当我取消选择该项目时,onCreateView
中的字体颜色会发生变化。我认为因为首选项已更改,系统需要再次创建视图。
仅在切换首选项时才有效。正如我上面提到的那样,当我触摸某个项目并将我的手指移动到另一个项目时,字体颜色保持白色,因为首选项状态保持不变并且未达到MotionEvent.ACTION_CANCEL
。
如果我在OnTouchListener中返回true MotionEvent.ACTION_UP
并且已到达MotionEvent.ACTION_CANCEL
,但它会消耗该事件并且背景颜色不会更改。
这是我来到这里的故事。
我通过自定义 list_item.xml 在ListView中应用样式,并使用我的 listview_item_selector.xml 设置textColor但是在首选项中,它使用默认的ListView,所以我不# 39;不知道怎么做。
我该怎么办?我是否必须自定义所有首选项? 任何建议都会很棒。感谢。