NumberPicker 这个空间可以帮助我们实现很多效果,如 自定义的日期时间选择器,城市的多级联动等。当我们实现了自己想要的功能后,往往会觉得系统自带的样式和我们要开发的应用的风格主题不搭配的请情况。这里不讲NumberPicker怎么实现其可以组合的功能。今天的主题是怎么改变NumberPicker的样式。
核心代码如下:
1、自定义一个类CustomNumberPicker继承系统的NumberPicker。并在CustomNumberPicker重写addView()方法,在addView()中设置NumberPicker内容的字体颜色和字体大小以及背景颜色等的设置。
2、在CustomNumberPicker内中写一个方法来实现NumberPicker分割线样式的设置。
核心代码如下:
1、自定义一个类CustomNumberPicker继承系统的NumberPicker。并在CustomNumberPicker重写addView()方法,在addView()中设置NumberPicker内容的字体颜色和字体大小以及背景颜色等的设置。
2、在CustomNumberPicker内中写一个方法来实现NumberPicker分割线样式的设置。
CustomNumberPicker的核心代码:
package com.yehu.customnumberpicker.view;
import java.lang.reflect.Field;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;
import android.widget.NumberPicker;
/**
*
* @author yehu
* 时间 2015年12月17日下午5:43:03
*/
public class CustomNumberPicker extends NumberPicker {
public CustomNumberPicker(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CustomNumberPicker(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomNumberPicker(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
public void addView(View child) {
this.addView(child, null);
}
@Override
public void addView(View child, android.view.ViewGroup.LayoutParams params) {
this.addView(child, -1, params);
}
@Override
public void addView(View child, int index,
android.view.ViewGroup.LayoutParams params) {
super.addView(child, index, params);
setNumberPicker(child);
}
/**
* 设置CustomNumberPicker的属性 颜色 大小
* @param view
*/
public void setNumberPicker(View view) {
if (view instanceof EditText) {
((EditText) view).setTextColor(0xffff5000);
((EditText) view).setTextSize(18);
}
}
/**
* 设置分割线的颜色值
* @param numberPicker
*/
@SuppressWarnings("unused")
public void setNumberPickerDividerColor(NumberPicker numberPicker) {
NumberPicker picker = numberPicker;
Field[] pickerFields = NumberPicker.class.getDeclaredFields();
for (Field pf : pickerFields) {
if (pf.getName().equals("mSelectionDivider")) {
pf.setAccessible(true);
try {
pf.set(picker, new ColorDrawable(Color.GREEN));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (Resources.NotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
break;
}
}
}
}
MainActivity类的代码:
package com.yehu.customnumberpicker;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import com.yehu.customnumberpicker.view.CustomNumberPicker;
/**
*
* @author yehu
* 时间 2015年12月17日下午5:42:53
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CustomNumberPicker numberPicker = (CustomNumberPicker) findViewById(R.id.numberPicker);
numberPicker.setMaxValue(23);
numberPicker.setMinValue(01);
numberPicker.setValue(49);
numberPicker.setBackgroundColor(Color.LTGRAY);
numberPicker.setNumberPickerDividerColor(numberPicker);
}
}
布局很简单,如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<com.yehu.customnumberpicker.view.CustomNumberPicker
android:id="@+id/numberPicker"
android:layout_width="wrap_content"
android:layout_centerInParent="true"
android:layout_height="wrap_content"
/>
</RelativeLayout>
效果图如下:
NumberPicker的基本属性样式设置已经实现了。