android使用NumberPicker实现自定义带时间的对话框
来源:互联网 发布:苹果手机老是网络异常 编辑:程序博客网 时间:2024/05/07 06:47
android使用NumberPicker实现自定义带时间的对话框
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:orientation="vertical" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:orientation="horizontal" > <NumberPicker android:id="@+id/year" android:layout_width="50dip" android:layout_height="wrap_content" android:focusable="true" android:focusableInTouchMode="true" android:visibility="gone" /> <TextView android:id="@+id/year_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="年" android:visibility="gone" /> <NumberPicker android:id="@+id/hour" android:layout_width="50dip" android:layout_height="wrap_content" android:focusable="true" android:focusableInTouchMode="true" android:visibility="gone" /> <TextView android:id="@+id/hour_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="时" android:visibility="gone" /> <NumberPicker android:id="@+id/min" android:layout_width="50dip" android:layout_height="wrap_content" android:focusable="true" android:focusableInTouchMode="true" android:visibility="gone" /> <TextView android:id="@+id/min_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="分" android:visibility="gone" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="45dp" android:layout_gravity="center_vertical" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="5dp" android:orientation="horizontal" > <Button android:id="@+id/sure_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginRight="5dp" android:layout_weight="1" android:text="确定" /> <Button android:id="@+id/cacel_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_weight="1" android:text="取消" /> </LinearLayout></LinearLayout>
package numberpicker;import java.util.Calendar;import android.app.Dialog;import android.content.Context;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.Button;import android.widget.NumberPicker;import android.widget.NumberPicker.Formatter;import android.widget.NumberPicker.OnScrollListener;import android.widget.NumberPicker.OnValueChangeListener;import android.widget.TextView;import com.example.numberwheeltest.R;public class NumberDialog extends Dialog implements OnValueChangeListener,OnScrollListener, Formatter, android.view.View.OnClickListener {private NumberPicker year_numberpicker;// 年private NumberPicker hour_numberpicker;// 时private NumberPicker min_numberpicker;// 分private TextView year_tv;private TextView hour_tv;private TextView min_tv;public static int YEAR = 1;// 年public static int MONTH = 2;// 月public static int DATE = 3;// 日public static int YEAR_DATE = 4;// 月日public static int YEAR_MONTH_DATE = 5;// 年月日public static int HOUR_MIN_SECOND = 6;// 时分秒private int dateFormat = YEAR_MONTH_DATE;// 月日,时分秒private Context context;private Button sure_btn, cacel_btn;private OnclickLinsterDialog linsterDialog;public NumberDialog(Context context) {super(context);this.context = context;}@Overrideprotected void onCreate(Bundle savedInstanceState) {requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.datetime_picker);Window dialogWindow = getWindow();WindowManager.LayoutParams lp = dialogWindow.getAttributes();dialogWindow.setGravity(Gravity.CENTER);lp.width = getWidth() * 9 / 10; // 宽度lp.height = WindowManager.LayoutParams.WRAP_CONTENT; // 高度dialogWindow.setAttributes(lp);setTitle("选择时间");initView();super.onCreate(savedInstanceState);}public void setDateFormat(int format) {this.dateFormat = format;}/** * 获取手机屏幕宽 * * @return */public int getWidth() {int width = 1;WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);width = wm.getDefaultDisplay().getWidth();return width;}private void initView() {sure_btn = (Button) findViewById(R.id.sure_btn);cacel_btn = (Button) findViewById(R.id.cacel_btn);sure_btn.setOnClickListener(this);cacel_btn.setOnClickListener(this);year_tv = (TextView) findViewById(R.id.year_tv);hour_tv = (TextView) findViewById(R.id.hour_tv);min_tv = (TextView) findViewById(R.id.min_tv);Calendar calendar = Calendar.getInstance();year_numberpicker = (NumberPicker) findViewById(R.id.year);year_numberpicker.setFormatter(this);year_numberpicker.setOnValueChangedListener(this);// 值改变监听year_numberpicker.setOnScrollListener(this);// 活动监听year_numberpicker.setEnabled(true);// 内容不可编辑hour_numberpicker = (NumberPicker) findViewById(R.id.hour);hour_numberpicker.setFormatter(this);hour_numberpicker.setOnValueChangedListener(this);// 值改变监听hour_numberpicker.setOnScrollListener(this);// 活动监听hour_numberpicker.setEnabled(true);// 内容不可编辑min_numberpicker = (NumberPicker) findViewById(R.id.min);min_numberpicker.setFormatter(this);min_numberpicker.setOnValueChangedListener(this);min_numberpicker.setOnScrollListener(this);hour_numberpicker.setEnabled(true);if (dateFormat == YEAR) {// 年year_numberpicker.setMaxValue(2100);// 最大值year_numberpicker.setMinValue(1900);// 最小值year_numberpicker.setValue(calendar.get(Calendar.YEAR));// 获取当前年year_numberpicker.setVisibility(View.VISIBLE);year_tv.setVisibility(View.VISIBLE);} else if (dateFormat == MONTH) {// 月hour_numberpicker.setMaxValue(12);// 最大值hour_numberpicker.setMinValue(1);// 最小值hour_numberpicker.setValue(calendar.get(Calendar.MONTH));hour_numberpicker.setVisibility(View.VISIBLE);hour_tv.setVisibility(View.VISIBLE);} else if (dateFormat == DATE) {// 日min_numberpicker.setMaxValue(31);min_numberpicker.setMinValue(1);min_numberpicker.setValue(calendar.get(Calendar.DATE));min_numberpicker.setVisibility(View.VISIBLE);min_tv.setVisibility(View.VISIBLE);} else if (dateFormat == YEAR_MONTH_DATE) {// 年月日// 年year_numberpicker.setMaxValue(2100);// 最大值year_numberpicker.setMinValue(1990);// 最小值year_numberpicker.setValue(calendar.get(Calendar.YEAR));// 获取当前年// 月hour_numberpicker.setMaxValue(12);// 最大值hour_numberpicker.setMinValue(1);// 最小值hour_numberpicker.setValue(calendar.get(Calendar.MONTH) + 1);// 获取当前月// 日min_numberpicker.setMaxValue(31);min_numberpicker.setMinValue(1);min_numberpicker.setValue(calendar.get(Calendar.DATE));// 获取当前年year_numberpicker.setVisibility(View.VISIBLE);hour_numberpicker.setVisibility(View.VISIBLE);min_numberpicker.setVisibility(View.VISIBLE);year_tv.setVisibility(View.VISIBLE);year_tv.setText("年");hour_tv.setVisibility(View.VISIBLE);hour_tv.setText("月");min_tv.setVisibility(View.VISIBLE);min_tv.setText("日");} else if (dateFormat == HOUR_MIN_SECOND) {// 时year_numberpicker.setMaxValue(24);// 最大值year_numberpicker.setMinValue(0);// 最小值year_numberpicker.setValue(calendar.get(Calendar.HOUR_OF_DAY));// 获取当前时// 分hour_numberpicker.setMaxValue(60);// 最大值hour_numberpicker.setMinValue(0);// 最小值hour_numberpicker.setValue(calendar.get(Calendar.MINUTE));// 获取当前时// 秒min_numberpicker.setMaxValue(60);min_numberpicker.setMinValue(0);min_numberpicker.setValue(calendar.get(Calendar.SECOND));year_numberpicker.setVisibility(View.VISIBLE);hour_numberpicker.setVisibility(View.VISIBLE);min_numberpicker.setVisibility(View.VISIBLE);year_tv.setVisibility(View.VISIBLE);year_tv.setText("时");hour_tv.setVisibility(View.VISIBLE);hour_tv.setText("分");min_tv.setVisibility(View.VISIBLE);min_tv.setText("秒");}}/*** * 值改变监听 oldVal 原来值 newVal 改变值 */@Overridepublic void onValueChange(NumberPicker picker, int oldVal, int newVal) {switch (picker.getId()) {case R.id.year:if (newVal < 1990) {year_numberpicker.setValue(newVal + 1);}break;case R.id.hour:// 中间的控件,1,显示月,2,显示分// 如果显示年月日if (dateFormat == YEAR_MONTH_DATE) {if (oldVal == 12 && newVal == 01) {year_numberpicker.setValue(year_numberpicker.getValue() + 1);} else if (oldVal == 01 && newVal == 12) {year_numberpicker.setValue(year_numberpicker.getValue() - 1);}// 如果显示时分秒} else if (dateFormat == HOUR_MIN_SECOND) {if (oldVal == 60 && newVal == 01) {year_numberpicker.setValue(year_numberpicker.getValue() + 1);} else if (oldVal == 01 && newVal == 60) {year_numberpicker.setValue(year_numberpicker.getValue() - 1);}}break;case R.id.min:// // 中间的控件,1,显示日,2,显示秒// 显示年月日if (dateFormat == YEAR_MONTH_DATE) {if (oldVal == 31 && newVal == 01) {hour_numberpicker.setValue(hour_numberpicker.getValue() + 1);} else if (newVal == 31 && oldVal == 01) {hour_numberpicker.setValue(hour_numberpicker.getValue() - 1);}} else if (dateFormat == HOUR_MIN_SECOND) {if (oldVal == 60 && newVal == 01) {hour_numberpicker.setValue(hour_numberpicker.getValue() + 1);} else if (oldVal == 01 && newVal == 60) {hour_numberpicker.setValue(hour_numberpicker.getValue() - 1);}}default:break;}}/*** * value的值格式,当值小于10,前面加一个0 */@Overridepublic String format(int value) {String tmpStr = String.valueOf(value);if (value < 10) {tmpStr = "0" + tmpStr;}return tmpStr;}/** * 滑动监听事件 */@Overridepublic void onScrollStateChange(NumberPicker view, int scrollState) {switch (scrollState) {case OnScrollListener.SCROLL_STATE_FLING:// 后续滑动,停不下来break;case OnScrollListener.SCROLL_STATE_IDLE:// 不滑动break;case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:// 滑动中break;}}public void setOnclickLinsterDialog(OnclickLinsterDialog click) {this.linsterDialog = click;}interface OnclickLinsterDialog {void choseDate(String date);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.sure_btn:String year = String.valueOf(year_numberpicker.getValue());// 年String month = String.valueOf(hour_numberpicker.getValue());// 月String date = String.valueOf(min_numberpicker.getValue());// 日linsterDialog.choseDate("选择的时间是:" + year + ";month:" + month+ ";date:" + date);dismiss();break;case R.id.cacel_btn:dismiss();break;default:break;}}}
调用:
NumberDialog numberDialog = new NumberDialog(this);numberDialog.setDateFormat(NumberDialog.YEAR_MONTH_DATE);numberDialog.show();numberDialog.setOnclickLinsterDialog(new OnclickLinsterDialog() {@Overridepublic void choseDate(String date) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, date, 1000).show();}});
1 0
- android使用NumberPicker实现自定义带时间的对话框
- NumberPicker+AlertDialog实现精确到秒的Android日期时间对话框
- android自定义时间控件NumberPicker
- Android日期对话框NumberPicker的用法教程
- NumberPicker自定义时间选择器
- Android 自定义NumberPicker
- Android自定义对话框的实现
- 自定义对话框的实现--Android
- Android自定义对话框的使用
- Android NumberPicker 使用
- Android带进度条对话框ProgressDialog的使用
- Android的自定义数字Picker控件-NumberPicker使用方法
- [Android]体验好于NumberPicker的自定义控件NumberPickerView
- Android的NumberPicker
- NumberPicker的使用
- DialogFragment && NumberPicker的使用
- NumberPicker的使用简记
- Android使用NumberPicker控件实现选择城市,生日
- js鼠标禁止右键,复制,黏贴等功能
- 栈的压入、弹出序列
- jq事件绑定.on()、解绑事件off()用法详解
- Const关键字
- cookie本地测试
- android使用NumberPicker实现自定义带时间的对话框
- Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)
- css3 resize自由缩放,改变宽高
- iPhone图片拉伸:resizableImageWithCapInsets
- java float问题
- (11.1.4)Hadoop基础教程之分布式环境搭建
- resizableImageWithCapInsets 使用须知
- Remove Element
- 几个常用的API HOOK的工具包