9

我想对DatePicker. 在平台中attrs.xmlDatePicker,我们可以看到styleable的以下属性:

<declare-styleable name="DatePicker">
    ...
    <!-- The text color for the selected date header text, ex. "2014" or
         "Tue, Mar 18". This should be a color state list where the
         activated state will be used when the year picker or day picker is
         active.-->
    <attr name="headerTextColor" format="color" />

    <!-- The background for the selected date header. -->
    <attr name="headerBackground" />
    ...
</declare-styleable>

虽然我可以参考android:headerBackground,但出乎意料的是,我无法为android:headerTextColor属性做到这一点。所以下面的代码styles.xml

<style name="MyDatePickerStyle" parent="@android:style/Widget.Material.DatePicker">
  <item name="android:headerBackground">@color/red</item>
  <item name="android:headerTextColor">@color/red</item>
</style>

提示错误,android:headerTextColor无法解决。

在此处输入图像描述

但我可以清楚地看到 Widget.Material.DatePicker覆盖该属性。有趣的是,这段代码前面有Attributes for new-style DatePicker注释,这可能会以某种方式导致这种行为的原因。

这种行为的原因可能是什么以及如何覆盖该属性?

在 Android Studio 2.3、minSdkVersion 23、buildToolsVersion 25.0.3、compileSdkVersion 和 targetSdkVersion 23 上运行,缓存和清理项目无效。


正如您在R.attrdocs中看到的那样,一些属性后面有这个文本:

此常量在 API 级别 23 中已弃用。请改用headerTextColor

这意味着,该属性应该暴露给公共 API,但不知何故它被剥离并且 AAPT 无法访问它。

在错误跟踪器上打开了一个问题。

4

3 回答 3

4

样式属性

AAPT 表示该属性是私有的。可能他们缺少@hide一个attrs.xml

于 2017-06-01T17:39:24.583 回答
1

已经有一段时间了,但由于这还没有解决,我通过获取标题的视图 ID,然后直接以编程方式设置文本颜色,在我像这样在片段中调用 picker.show() 之后解决了这个问题。希望这会帮助那些偶然发现这个问题的人。

int yearSpinnerId = Resources.getSystem().getIdentifier("date_picker_header_year", "id", "android");
AppCompatTextView year = picker.findViewById(yearSpinnerId);
int headerTextId = Resources.getSystem().getIdentifier("date_picker_header_date", "id", "android");
AppCompatTextView selectedDate = picker.findViewById(headerTextId);
year.setTextColor(getResources().getColor(R.color.white_FFFFFF));
selectedDate.setTextColor(getResources().getColor(R.color.white_FFFFFF));
于 2019-06-07T20:52:44.010 回答
-1

尝试使用这个

样式.xml

 <style name="DatePicker">
        <item name="android:headerBackground">@color/colorPrimaryDark</item>
        <item name="headerTextColor">@color/colorAccent</item>
 </style>

值文件夹 attr.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="DatePicker">
        ...
        <!-- The text color for the selected date header text, ex. "2014" or
             "Tue, Mar 18". This should be a color state list where the
             activated state will be used when the year picker or day picker is
             active.-->
        <attr name="headerTextColor" format="color" />
    </declare-styleable>
</resources>
于 2017-06-01T05:21:31.290 回答