如何在Appcompat主题中更改TimePicker线条的颜色?

3
如何在Appcompat主题中更改TimePicker中选定数字之间的线条颜色? 线条是蓝色的,但我需要橙色的线条。我使用带有ContextThemeWrapper的TimePickerDialog。
   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。我不确定是否只需要使用可绘制或颜色。预先感谢您。

请使用以下答案进行翻译:https://dev59.com/2WIj5IYBdhLWcg3wilkI#20291416 - Mohammad Rababah
2个回答

7
我用自己的Timepicker类解决了这个问题,它扩展了android Timepicker类。我受到stackoverflow.com/questions/20148671/android-how-to-change-the-color-of-the-datepicker-divider/20291416#20291416的启发,这篇文章是由我的提问下面的评论mohammad rababah发布的。
这是样式化的timepicker类:
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

你会在哪里以及如何调用这个类? - Navio53
您可以将此类添加到XML布局中。例如:<com.yourpackage.views.StyledTimePicker ... /> - Vanama
@Navio53,你能分享一下你用的是哪个库吗? - Haifeng Zhang
我使用了timepicker库和numberpicker库。这是timepicker库的链接,其中包含numberpicker库的链接:https://github.com/SimonVT/android-timepicker - Navio53
不知道为什么这个没有被标记为正确答案,但是对我来说这个方法有效。谢谢。 - Juan Acevedo
嗨,我知道已经过了一段时间,但有人想出如何使分隔符连接起来吗?就像从天到年的一条长线? - confusedstudent

0

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

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

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

</style>

然后打开你的 AndroidManifest.xml 文件。找到 android:theme 并替换为 android:theme="@style/MYTheme"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接