gpt4 book ai didi

android - 在 PreferenceActivity 中更改 fragment 的突出显示和标题颜色

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:01 26 4
gpt4 key购买 nike

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

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

enter image description here

有什么想法吗?

最佳答案

I know there's an attribute for the color of each somewhere in the theme, but I just can't seem to find it.

项目编号 1

您需要的属性是 activatedBackgroundIndicator .

根据文档

Drawable used as a background for activated items.

原因是

用于 PreferenceActivity 中每个标题项的布局是 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)的。

但是,您可以使用反射设置文本颜色,或者只是遍历面包屑的 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);
}

});

结果

results

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

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