自定义Android DatePicker的按钮

时间:2014-08-29 10:02:30

标签: android datepicker customization

我当前自定义UI的方法是使用常用的Android DatePicker,然后使用DatePicketDialog.getDatePicker()来获取内部组件,并自定义它。

现在结果位于https://dl.dropboxusercontent.com/u/3286004/Screen%20Shot%202557-08-29%20at%202.52.21%20AM.png

的图片中

问题是......我想将DONE按钮上方的黑线自定义为另一种颜色。 你能建议我如何把这个线组件拿出来,所以我可以改变它。

提前谢谢你:D

3 个答案:

答案 0 :(得分:2)

这绝对是可能的,实际上你可以用它做任何你想做的事。实际上,其中一个选项是使用样式和主题,但在4.x中不起作用。更简单地说,正确或简单的方法是使用视图本身,如下所示:

        // we need this listener since only here all views are really drawn and accessible
        yourDialog.setOnShowListener(new DialogInterface.OnShowListener() {
            private boolean areButtonsFixed;
            @Override
            public void onShow(DialogInterface dialog) {
                if (areButtonsFixed)
                    return;

                // both buttons - you could search for only positive button or whatever button your dialog has
                final Button btnPositive = getButton(DatePickerDialog.BUTTON_POSITIVE);
                final Button btnNegative = getButton(DatePickerDialog.BUTTON_NEGATIVE);
                final Button btnNeutral = getButton(DatePickerDialog.BUTTON_NEUTRAL);

                // buttons layout parameters, change it into material style (gravity right)
                final LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) btnPositive.getLayoutParams();
                lp.weight = 0; // was 1 to fill 50% horizontally

                // positive button, set your own label
                btnPositive.setText(R.string.dialog_ok_label);
                // set text color and size                
btnPositive.setTextColor(ResHelper.getColor(R.color.blue_bright));
                btnPositive.setTextSize(TypedValue.COMPLEX_UNIT_PX, ResHelper.getDimensPx(R.dimen.text_size_14));

                btnPositive.setLayoutParams(lp);

                // divider above buttons
                ((LinearLayout) btnPositive.getParent().getParent()).setShowDividers(LinearLayout.SHOW_DIVIDER_NONE);
                areButtonsFixed = true;
}

这个(prelast line)将删除按钮上方的分隔符。如果您希望自定义它,请执行以下操作:

((LinearLayout) btnPositive.getParent().getParent()).setDividerDrawable(R.drawable.yer_drawable);

答案 1 :(得分:1)

一种方法是使用另一个主题。这个主题是Holo我认为,所以你不能改变颜色。

我认为您可以使用自定义布局创建对话框。 如果您使用自定义布局,则可以更改颜色。

或者,您应该使用其他主题,或创建自己的主题。

修改

是的,也是在运行时间。 在布局上使用的许多东西都被锁定,比如颜色,特别是在小部件上(例如searchView)

答案 2 :(得分:0)

在默认对话框中不可能,此行具有系统颜色。您应该将此对话框转换为活动,然后您可以在那里更改颜色。