【问题标题】:Change Divider Color Android DatePicker Dialog更改分隔线颜色 Android DatePicker 对话框
【发布时间】:2013-02-13 08:16:41
【问题描述】:

我要更改 DatePicker 对话框的分隔线颜色。

我创建样式:

<style name="dialog_custom" parent="@android:style/Widget.DatePicker">
        <item name="android:divider">@drawable/dialog_divider</item>
    </style>

然后创建像this 这样的drawable

结果是this

分隔线没有改变颜色,对话框采用内容大小..

【问题讨论】:

    标签: android colors datepicker divider


    【解决方案1】:

    这是我在 NumberPickers、TimePickers、DatePickers 和 TimePickerDialog 中更改分隔线颜色的解决方案。对于 DatePickerDialog,您可以调用 DatePickerDialog.getDatePicker()

    public class NumberPickerStylingUtils {
    
    private static final Drawable PICKER_DIVIDER_DRAWABLE = //Place your drawable here
    
    private NumberPickerStylingUtils() {}
    
    public static void applyStyling(TimePickerDialog timePickerDialog) {
        try {
            Field field = TimePickerDialog.class.getDeclaredField("mTimePicker");
            field.setAccessible(true);
            applyStyling((TimePicker) field.get(timePickerDialog));
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    
    public static void applyStyling(TimePicker timePicker) {
        try {
            Field fields[] = TimePicker.class.getDeclaredFields();
            for (Field field : fields) {
                if (field.getType().equals(NumberPicker.class)) {
                    field.setAccessible(true);
                    applyStyling((NumberPicker) field.get(timePicker));
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    
    public static void applyStyling(DatePicker datePicker) {
        try {
            Field fields[] = DatePicker.class.getDeclaredFields();
            for (Field field : fields) {
                if (field.getType().equals(NumberPicker.class)) {
                    field.setAccessible(true);
                    applyStyling((NumberPicker) field.get(datePicker));
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    
    public static void applyStyling(NumberPicker numberPicker) {
        try {
            Field field = NumberPicker.class.getDeclaredField("mSelectionDivider");
            field.setAccessible(true);
            field.set(numberPicker, PICKER_DIVIDER_DRAWABLE));
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
    

    }

    【讨论】:

      【解决方案2】:

      您可以使用主题来做到这一点。检查此question 的已接受答案。我认为它会对你有所帮助。

      更新

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

      <?xml version="1.0" encoding="utf-8"?>
      <resources xmlns:android="http://schemas.android.com/apk/res/android">
      
          <style name="MYTheme" parent="@android:style/Theme">
      
             <item name="android:divider">@drawable/dialog_divider</item>
      
          </style>
      
      </resources>
      

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

      【讨论】:

      • 当我这样做时,我得到这个错误:错误:错误:找不到与给定名称匹配的资源:attr 'android:_DEFAULT_BASE_COLOR_1'。
      • 您是否在资源中定义了_DEFAULT_BASE_COLOR_1
      • 对不起,但是...什么资源?我该如何定义它?
      • 我尝试使用 android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html 生成所有资源。但是分隔线的默认颜色没有变化..
      • 抱歉,我再次收到此错误。请参阅链接dl.dropbox.com/u/30331820/ERROR.png
      猜你喜欢
      • 2013-09-13
      • 2013-06-23
      • 2013-02-22
      • 1970-01-01
      • 2015-04-28
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多