可设置的NumberPicker(时间选择器)分割线 字体颜色以及大小等属性

NumberPicker 这个空间可以帮助我们实现很多效果,如 自定义的日期时间选择器,城市的多级联动等。当我们实现了自己想要的功能后,往往会觉得系统自带的样式和我们要开发的应用的风格主题不搭配的请情况。这里不讲NumberPicker怎么实现其可以组合的功能。今天的主题是怎么改变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的基本属性样式设置已经实现了。

本项目的Demo代码



  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设置 NumberPicker 控件中选中项的字体样式,您可以通过自定义 Adapter 来实现。以下是一个示例代码: ```java // 创建一个自定义的 NumberPickerAdapter 继承自 ArrayAdapter class NumberPickerAdapter extends ArrayAdapter<String> { private Context context; private int selectedItemColor; // 选中项的字体颜色 private int normalItemColor; // 非选中项的字体颜色 public NumberPickerAdapter(Context context, int resource, List<String> objects, int selectedItemColor, int normalItemColor) { super(context, resource, objects); this.context = context; this.selectedItemColor = selectedItemColor; this.normalItemColor = normalItemColor; } @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { TextView textView = (TextView) super.getView(position, convertView, parent); if (position == getSelectedItemPosition()) { // 设置选中项的字体颜色 textView.setTextColor(selectedItemColor); } else { // 设置非选中项的字体颜色 textView.setTextColor(normalItemColor); } return textView; } } ``` 然后,在您的代码中使用自定义的 Adapter: ```java NumberPicker numberPicker = findViewById(R.id.numberPicker); String[] values = {"1", "2", "3", "4", "5"}; // 设置要显示的选项值 numberPicker.setMinValue(0); // 设置最小值 numberPicker.setMaxValue(values.length - 1); // 设置最大值 // 创建自定义的 Adapter,并设置选中项和非选中项的字体颜色 NumberPickerAdapter adapter = new NumberPickerAdapter(this, android.R.layout.simple_list_item_1, Arrays.asList(values), Color.RED, Color.BLACK); numberPicker.setDisplayedValues(values); // 设置显示的选项值 numberPicker.setWrapSelectorWheel(true); // 设置循环滚动 numberPicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); // 禁止编辑文本框 numberPicker.setFormatter(null); // 禁用默认的格式化 numberPicker.setAdapter(adapter); // 设置自定义的 Adapter ``` 通过以上代码,您可以设置 NumberPicker 控件选中项的字体颜色。您可以根据自己的需求修改字体颜色和其他属性。希望对您有帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值