安卓自定义TimePickerPreference

19 篇文章 0 订阅
3 篇文章 0 订阅
  1. 实现效果:
    这里写图片描述

  2. PreferenceScreen布局
    preference.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout="@layout/preference_item"
    android:padding="10dp">
    .
    .
      <!--xxx包名-->
      <xx.xxx.xxx.TimePickerPreference
            android:title="@string/wallpaper_refresh_interval"
            android:key="wallpaper_refresh_interval"
            android:summary="@string/description_set_interval" />  .
     .
     .
</PreferenceScreen>

注意指定android:dialogLayout="@layout/dialog_time_picker"
android:key="wallpaper_refresh_interval"/
,更改弹出dialog布局
3.dialog弹出布局
dialog_time_picker.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/radial_time_picker"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <TextView
        android:id="@android:id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"/>
    <TimePicker
        android:id="@+id/time_picker"
        android:timePickerMode="spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

注意:<TextView android:id="@android:id/title" 这里textview为标题栏,必须指定id为@android:id/title

android:timePickerMode="spinner"为选取方式

4.TimePickerPreference 继承DialogPreference :


public class TimePickerPreference extends DialogPreference {
   public TimePickerPreference(Context context) {
      super(context);
   }

   public TimePickerPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
      super(context, attrs, defStyleAttr, defStyleRes);
   }

   public TimePickerPreference(Context context, AttributeSet attrs, int defStyleAttr) {
      super(context, attrs, defStyleAttr);
   }

   public TimePickerPreference(Context context, AttributeSet attrs) {
      super(context, attrs);
   }

   @Override
   protected View onCreateDialogView() {
      setDialogLayoutResource(R.layout.dialog_time_picker);
      setDialogTitle(R.string.select_refresh_interval);

      return super.onCreateDialogView();
   }

   @Override
   protected void onBindDialogView(View view) {
      super.onBindDialogView(view);
//      Dialog dialog = getDialog();
      timePicker = (view.findViewById(R.id.time_picker));
      timePicker.setIs24HourView(true);
      timePicker.setDrawingCacheEnabled(true);
      String[] s = SettingHelper.getIntervalStr().split(":");//old

      timePicker.setCurrentHour(Integer.parseInt(s[0]));//
      timePicker.setCurrentMinute(Integer.parseInt(s[1]));
   }

   private TimePicker timePicker;

   @Override
   public void onClick(DialogInterface dialogInterface, int which) {
      switch (which) {
         case Dialog.BUTTON_POSITIVE:
            //OK
            String intervalStr = timePicker.getCurrentHour() + ":" +
                    timePicker.getCurrentMinute();
            //LogHelper.d(intervalStr);
            long interval = Utils.interval2Mills(intervalStr);
            if (interval < 0) {
               //MyApplication.getApplication().getSettingsActivity().showSnack(R.string.time_format_error);
            } else {
               SettingHelper.setInterval(intervalStr);
               new AlarmHelper(MyApplication.getApplication().getSettingsActivity()).startAlarmForActivityWithInterval(
                       AlarmActivity.ACTION_ALARM_SET_WALLPAPER, interval,
                       AlarmHelper.REQUEST_CODE_ALARM_SET_WALLPAPER);
               //MyApplication.getApplication().getSettingsActivity().showSnack(R.string.update_setting);
               this.setSummary(intervalStr);
            }
            LogHelper.d("点击OK");
            //dialog.dismiss();//关闭,不再触发onPreferenceChange

            break;
         case Dialog.BUTTON_NEGATIVE:
            //do something
            break;
         case Dialog.BUTTON_NEUTRAL:
            //dosomething
            break;
      }
      super.onClick(dialogInterface, which);
   }

   @Override
   protected View onCreateView(ViewGroup parent) {
      return super.onCreateView(parent);
   }
}

划重点:

  • final Dialog dialog = ((EditTextPreference) preference).getDialog();
    final TimePicker timePicker = (dialog.findViewById(R.id.time_picker));
    timePicker.setIs24HourView(true);//设置24小时制

注:
timePicker有:

 timePicker.setCurrentHour(...);
 timePicker.setCurrentMinute(...);
 String time= timePicker.getCurrentHour() + ":"+timePicker.getCurrentMinute();

同时有

timePicker.setHour(...);
timePicker.setMinute(...);
timePicker.getHout();
timePicker.getMinute();

但这些需要在sdk>=23下才可使用
否则会报

Call requires API level 23 (current min is 21): android.widget.TimePicker#getMinute
Call requires API level 23 (current min is 21): android.widget.TimePicker#getHour

.
.
.


———– END ———–

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值