gpt4 book ai didi

android - 使用 AppCompat v21 将色调应用于 PreferenceActivity 小部件

转载 作者:IT老高 更新时间:2023-10-28 23:32:34 26 4
gpt4 key购买 nike

我在 PreferenceActivity 和来自 v21 支持库的 AppCompat 主题中使用 CheckboxPreference。如您所知,使用这个最新的库小部件,如复选框、编辑文本、单选按钮等,都使用主题中定义的辅助颜色进行着色。在首选项屏幕中,文本是我的主题指定的正确颜色,但复选框和编辑文本不是。似乎当 CheckboxPreference 实例创建小部件时,它并没有将我的主题应用于它。

普通布局中的单选按钮,有色:

screenshot 1

CheckboxPreference 中的复选框,未着色:

screenshot 2

我使用 Theme.AppCompat.Light.NoActionBar 作为父主题。这发生在每个带有小部件的 Preference 子类上,比如 EditTextPreference 说一个,其中 EditText 有一条黑色底线,而不是一条有色线。如何将色调应用于 Preference 子类显示的小部件?

更新:不应用着色,因为 PreferenceActivity 扩展了框架 Activity。在工作案例中,我使用了支持库中的 ActionBarActivity。现在的问题是:怎么会?

最佳答案

编辑:从 AppCompat 22.1 开始,任何 Activity 都可以使用 AppCompatDelegate 进行主题化。 .着色 View 类的名称也从 v7.internal.widget.TintXYZ 更改为 v7.widget.AppCompatXYZ。以下答案适用于 AppCompat 22.0 及更早版本。


我也遇到过这个问题,只需从 ActionBarActivity 复制与小部件着色相关的代码即可解决。此解决方案的一个缺点是它依赖于将来可能会更改或变得不可用的内部类。

import android.support.v7.internal.widget.TintCheckBox;
import android.support.v7.internal.widget.TintCheckedTextView;
import android.support.v7.internal.widget.TintEditText;
import android.support.v7.internal.widget.TintRadioButton;
import android.support.v7.internal.widget.TintSpinner;

public class MyActivity extends PreferenceActivity {
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
// Allow super to try and create a view first
final View result = super.onCreateView(name, context, attrs);
if (result != null) {
return result;
}

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
// If we're running pre-L, we need to 'inject' our tint aware Views in place of the
// standard framework versions
switch (name) {
case "EditText":
return new TintEditText(this, attrs);
case "Spinner":
return new TintSpinner(this, attrs);
case "CheckBox":
return new TintCheckBox(this, attrs);
case "RadioButton":
return new TintRadioButton(this, attrs);
case "CheckedTextView":
return new TintCheckedTextView(this, attrs);
}
}

return null;
}
}

这是因为 onCreateView由 LayoutInflater 服务为从布局资源中膨胀的每个 View 调用,这允许 Activity 覆盖哪些类被实例化。确保 Activity 主题设置为 Theme.AppCompat。 (或后代)在 list 中。

ActionBarActivity.javaActionBarActivityDelegateBase.java为原始代码。

关于android - 使用 AppCompat v21 将色调应用于 PreferenceActivity 小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26466577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com