【问题标题】:How to change TimePicker lines color in Appcompat theme?如何更改 Appcompat 主题中的 TimePicker 线条颜色?
【发布时间】:2014-04-13 08:34:35
【问题描述】:

如何在 Appcompat 主题中更改所选数字之间的 TimePicker 线条颜色?线条是蓝色的,但我需要橙色线条。

我将 TimePickerDialog 与 ContextThemeWrapper 一起使用。

   TimePickerDialog timePicker = new TimePickerDialog(
        new ContextThemeWrapper(getActivity(), R.style.timePicker), 
    this, hour, minute, DateFormat.is24HourFormat(getActivity()));

风格

<style name="timePicker">
    <item name="android:divider">@drawable/cab_background_top_play</item>
</style>

但该行可能有其他 id。我不确定只使用可绘制对象或颜色。

提前致谢

【问题讨论】:

标签: android styling timepicker android-appcompat


【解决方案1】:

我用自己的 Timepicker 类解决了这个问题,该类扩展了 android Timepicker 类。我受到stackoverflow.com/questions/20148671/android-how-to-change-the-color-of-the-datepicker-divider/20291416#20291416 帖子的启发,该帖子在我的问题下方的评论中发布了mohammad rababah。

这是样式化的时间选择器类:

public class StyledTimePicker extends TimePicker {

        public StyledTimePicker(Context context, AttributeSet attrs) {
            super(context, attrs);

            Class<?> internalRID = null;
            try {
                internalRID = Class.forName("com.android.internal.R$id");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }

            Field month = null;
            try {
                month = internalRID.getField("hour");
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            }

            NumberPicker npMonth = null;
            try {
                npMonth = (NumberPicker) findViewById(month.getInt(null));
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }

            Field day = null;
            try {
                day = internalRID.getField("minute");
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            }

            NumberPicker npDay = null;
            try {
                npDay = (NumberPicker) findViewById(day.getInt(null));
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }

            Field year = null;
            try {
                year = internalRID.getField("amPm");
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            }

            NumberPicker npYear = null;
            try {
                npYear = (NumberPicker) findViewById(year.getInt(null));
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }

            Class<?> numberPickerClass = null;
            try {
                numberPickerClass = Class.forName("android.widget.NumberPicker");
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }

            Field selectionDivider = null;
            try {
                selectionDivider = numberPickerClass.getDeclaredField("mSelectionDivider");
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            }

            try {
                selectionDivider.setAccessible(true);
                selectionDivider.set(npMonth, getResources().getDrawable(
                        R.color.apptheme_color));
                selectionDivider.set(npDay, getResources().getDrawable(
                        R.color.apptheme_color));
                selectionDivider.set(npYear, getResources().getDrawable(
                        R.color.apptheme_color));
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (Resources.NotFoundException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
}

您只能更改 apptheme_color 的颜色。

感谢mohammad rababah

【讨论】:

  • 你会在哪里以及如何调用这个类?
  • 您可以将此类添加到 XML 布局中。例如
  • @Navio53 你能分享你使用哪个库吗?
  • 我使用了timepicker库和numberpicker库。这是 timepicker 库的链接,其中包含 numberpicker 库的链接:github.com/SimonVT/android-timepicker
  • 不知道为什么这没有被标记为正确答案,这对我有用。谢谢。
【解决方案2】:

在您的应用程序中展开 res 文件夹并展开 values 文件夹。然后在 values 文件夹中创建 theme.xml 文件。然后用以下代码替换themes.xml文件中的所有代码。

<style name="MYTheme" parent="@android:style/Theme">

   <item name="android:divider">@drawable/dialog_divider</item>

</style>

然后打开您的 AndroidManifest.xml 文件。并使用 android:theme="@style/MYTheme" 找到 android:theme 和 replcae

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-11-18
    • 2014-12-21
    相关资源
    最近更新 更多