我使用的是Material主题,我想更改下图中两个标记区域的颜色-即突出显示颜色(#1)和详细信息 fragment 中标题的颜色(#2)。

我知道主题中每个位置的颜色都有一个属性,但是我似乎找不到它。

有任何想法吗?

最佳答案



商品编号1

您需要的属性是 activatedBackgroundIndicator

根据文档



原因是
PreferenceActivity中每个 header 项目使用的布局是 preference_header_item_material ,它使用activatedBackgroundIndicator作为背景。您需要此属性的选择器,例如:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_activated="true"><color android:color="yourColor" />
    </item>
    <item><color android:color="@android:color/transparent" />
    </item>

</selector>

商品编号2

这个项目有点棘手。它不是您在其他答案中建议的PreferenceScreen,而是 FragmentBreadCrumbs 标题。不幸的是,标题颜色无法使用主题设置,因为用于对其进行样式设置的属性是内部私有(private)的。

但是,您可以使用Reflection或仅遍历面包屑的 View 层次结构,直到找到用于显示标题的TextView来设置文本颜色。

用于在每个PreferenceActivity中显示内容的布局是 preference_list_content_material ,其中包括用于显示每个面包屑的 breadcrumbs_in_fragment_material 布局。您可以从该布局中看到,每个FragmentBreadCrums的ID为android:id/title。现在,我们可以使用此ID查找面包屑并调整其中的TextView

使用反射
@Override
public void onBuildHeaders(List<Header> target) {
    super.onBuildHeaders(target);
    loadHeadersFromResource(R.xml.yourPreferenceHeaders, target);

    final View breadcrumb = findViewById(android.R.id.title);
    if (breadcrumb == null) {
        // Single pane layout
        return;
    }

    try {
        final Field titleColor = breadcrumb.getClass().getDeclaredField("mTextColor");
        titleColor.setAccessible(true);
        titleColor.setInt(breadcrumb, yourTitleColor);
    } catch (final Exception ignored) {
        // Nothing to do
    }

}

遍历 View 层次结构

使用 View.findViewsWithText 是处理此问题的简便方法。
    breadcrumb.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

        @Override
        public void onGlobalLayout() {
            breadcrumb.getViewTreeObserver().removeOnGlobalLayoutListener(this);

            final ArrayList<View> outViews = Lists.newArrayList();
            breadcrumb.findViewsWithText(outViews, getString(R.string.your_header_title),
                    View.FIND_VIEWS_WITH_TEXT);

            ((TextView) outViews.get(0)).setTextColor(yourTitleColor);
        }

    });

结果

关于android - 在PreferenceActivity中更改 fragment 的突出显示和标题颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26922915/

10-12 00:11
查看更多