更改 SwitchPreferenceCompat 的背景
Change Background of SwitchPreferenceCompat
我正在尝试使用 androidx.preference.PreferenceScreen 创建设置屏幕。
<androidx.preference.PreferenceScreen
xmlns:app="http://schemas.android.com/apk/res-auto">
<SwitchPreferenceCompat
app:key="enable"
app:title="@string/sync_title"/>
<SwitchPreferenceCompat
app:key="missed"
app:summary="Remove missed calls and block unwanted ones"
app:dependency="enable"
app:title="Missed call alert" />
<SwitchPreferenceCompat
app:key="blocked"
app:dependency="enable"
app:summary="Receive a silent notification when you receive an unwanted call"
app:title="Be informed of blocked calls " />
<PreferenceCategory
app:key="premium_cat"
app:dependency="enable"
app:title="Premium">
<SwitchPreferenceCompat
app:key="premium"
app:dependency="enable"
app:summary="Automatically identify spam calls"
app:title="Real time call alert" />
</PreferenceCategory>
我遇到的问题是我想为第一个设置添加不同的背景颜色
<SwitchPreferenceCompat
app:key="enable"
app:title="@string/sync_title"/>
我尝试添加布局但它不起作用它所做的只是隐藏 SwitchPreferenceCompat
你可以这样做
从 SwitchPreferenceCompat
扩展 java class
public class MySwitchPreference extends SwitchPreference {
public MySwitchPreference(Context context, AttributeSet attrs, int defStyleAttr)
{
super(context, attrs, defStyleAttr);
}
public MySwitchPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MySwitchPreference(Context context) {
super(context);
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
view.setBackgroundResource(R.color.your_color); // put here the color defined in colors.xml
}
}
那么,就这样使用吧
<com.your_package.your_name.MySwitchPreferenceCompat
app:key="enable"
app:title="@string/sync_title"/>
更新:
SwitchPreferenceCompat 似乎不再使用 onBindView 了。
现在我在 Kotlin 中是这样实现的:
internal class MySwitchPreference : SwitchPreferenceCompat {
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {}
constructor(context: Context?) : super(context) {}
override fun onBindViewHolder(holder: PreferenceViewHolder?) {
super.onBindViewHolder(holder)
holder?.itemView?.let { view ->
view.setBackgroundResource(R.color.your_color)
}
}
}
我正在尝试使用 androidx.preference.PreferenceScreen 创建设置屏幕。
<androidx.preference.PreferenceScreen
xmlns:app="http://schemas.android.com/apk/res-auto">
<SwitchPreferenceCompat
app:key="enable"
app:title="@string/sync_title"/>
<SwitchPreferenceCompat
app:key="missed"
app:summary="Remove missed calls and block unwanted ones"
app:dependency="enable"
app:title="Missed call alert" />
<SwitchPreferenceCompat
app:key="blocked"
app:dependency="enable"
app:summary="Receive a silent notification when you receive an unwanted call"
app:title="Be informed of blocked calls " />
<PreferenceCategory
app:key="premium_cat"
app:dependency="enable"
app:title="Premium">
<SwitchPreferenceCompat
app:key="premium"
app:dependency="enable"
app:summary="Automatically identify spam calls"
app:title="Real time call alert" />
</PreferenceCategory>
我遇到的问题是我想为第一个设置添加不同的背景颜色
<SwitchPreferenceCompat
app:key="enable"
app:title="@string/sync_title"/>
我尝试添加布局但它不起作用它所做的只是隐藏 SwitchPreferenceCompat
你可以这样做
从 SwitchPreferenceCompat
public class MySwitchPreference extends SwitchPreference {
public MySwitchPreference(Context context, AttributeSet attrs, int defStyleAttr)
{
super(context, attrs, defStyleAttr);
}
public MySwitchPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MySwitchPreference(Context context) {
super(context);
}
@Override
protected void onBindView(View view) {
super.onBindView(view);
view.setBackgroundResource(R.color.your_color); // put here the color defined in colors.xml
}
}
那么,就这样使用吧
<com.your_package.your_name.MySwitchPreferenceCompat
app:key="enable"
app:title="@string/sync_title"/>
更新: SwitchPreferenceCompat 似乎不再使用 onBindView 了。 现在我在 Kotlin 中是这样实现的:
internal class MySwitchPreference : SwitchPreferenceCompat {
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) {}
constructor(context: Context?) : super(context) {}
override fun onBindViewHolder(holder: PreferenceViewHolder?) {
super.onBindViewHolder(holder)
holder?.itemView?.let { view ->
view.setBackgroundResource(R.color.your_color)
}
}
}