我想将上面显示的numberpicker的分隔颜色(蓝色)更改为透明。 我尝试了很多像
这样的东西number_picker.setDividerDrawable(getResources().getDrawable(R.color.transparent));
number_picker.setShowDividers(NumberPicker.SHOW_DIVIDER_NONE);
我也试过在xml中设置android:divider 但他们都没有工作
然后我尝试使用样式设置它,但是当我在我的样式中添加以下条目时,它表示所需的最低版本为14而我的应用程序具有最低版本11
<style name="AppTheme" parent="@android:style/Widget.DeviceDefault.DatePicker">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<item name="android:divider">@color/transparent</item>
</style>
任何人都可以建议我如何实现这一目标?
答案 0 :(得分:4)
这对我有用而不使用反射。
my_layout.xml
<NumberPicker
...
android:theme="@style/DefaultNumberPickerTheme" />
Styles.xml(AppTheme是应用程序中的应用主题)
<style name="DefaultNumberPickerTheme" parent="AppTheme">
<item name="colorControlNormal">@color/dividerColor</item>
</style>
答案 1 :(得分:2)
使用Reflection,我们可以实现这个
public DatePickerDialog customDatePicker(OnDateSetListener listener, Calendar cal)
{
Calendar c;
if (cal == null) {
c = Calendar.getInstance();
} else {
c = cal;
}
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog newFragment = new DatePickerDialog(this, listener, year, month, day);
// removes the original topbar:
newFragment.setTitle("");
// Divider changing:
DatePicker dpView = newFragment.getDatePicker();
LinearLayout llFirst = (LinearLayout) dpView.getChildAt(0);
LinearLayout llSecond = (LinearLayout) llFirst.getChildAt(0);
for (int i = 0; i < llSecond.getChildCount(); i++) {
NumberPicker picker = (NumberPicker) llSecond.getChildAt(i); // Numberpickers in llSecond
// reflection - picker.setDividerDrawable(divider); << didn't seem to work.
Field[] pickerFields = NumberPicker.class.getDeclaredFields();
for (Field pf : pickerFields) {
if (pf.getName().equals("mSelectionDivider")) {
pf.setAccessible(true);
try {
pf.set(picker, getResources().getColor(R.color.green ));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (NotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
break;
}
}
}
// New top:
int titleHeight = 90;
// Container:
LinearLayout llTitleBar = new LinearLayout(this);
llTitleBar.setOrientation(LinearLayout.VERTICAL);
llTitleBar.setBackground(new ColorDrawable(Color.parseColor("#00afac")));
llTitleBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, titleHeight));
// TextView Title:
TextView tvTitle = new TextView(this);
tvTitle.setText("Select Birthday");
tvTitle.setGravity(Gravity.CENTER);
tvTitle.setPadding(10, 10, 10, 10);
tvTitle.setTextSize(24);
tvTitle.setTextColor(Color.parseColor("#FFFFFF"));
tvTitle.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, titleHeight-2));
llTitleBar.addView(tvTitle);
// View line:
View vTitleDivider = new View(this);
vTitleDivider.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 2));
vTitleDivider.setBackgroundColor(getResources().getColor(R.color.green));
llTitleBar.addView(vTitleDivider);
dpView.addView(llTitleBar);
FrameLayout.LayoutParams lp = (android.widget.FrameLayout.LayoutParams) llFirst.getLayoutParams();
lp.setMargins(0, titleHeight, 0, 0);
return newFragment;
}
// ----------------
将此功能称为
customDatePicker(this,calander).show();