日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android TimePickerDialog样式配置与TimePicker模式选择

發布時間:2025/3/15 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android TimePickerDialog样式配置与TimePicker模式选择 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

習慣性的,把要說的內容先總結一下:

TimePicker有兩種模式:spinner 和clock,可通過如下方式配置:

<TimePickerandroid:timePickerMode = "spinner"android:layout_width="match_parent"android:layout_height="match_parent"/>

或者

android:timePickerMode = "clock"

這兩種模式對應的時間的選擇一個是模擬的Clock,一個是類似spinner的方式。

另一個內容是TimePickerDialog的樣式。TimePickerDialog可以配置很多種樣式,可以直接在構造函數中來配置。代碼如下:

timePickerDialog = new TimePickerDialog(this, android.R.style.Theme_DeviceDefault_Light_Dialog,new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {}},0,0,false);timePickerDialog.setTitle("pick");timePickerDialog.show();

也可以不明確指定樣式,把上面構造函數的第二個參數去掉就好了。這里,我看到很多代碼都沒有第二個參數,所以這里把它提出來。

所以,以上就是我要說的所有內容。那么這么簡單的東西,我為什么要把它專門寫一篇博客呢?原因是這樣的:

Android5.0的時候,我使用TimePickerDialog時,外觀是這樣的:

?

?

?

?

而到了android6.0的時候,同樣的代碼,TimePickerDialog的樣式是這樣的:

這讓我很詫異,我嘗試在系統源碼中尋找答案。TimePickerDialog的源碼在:frameworks\base\core\Java\Android\app下,源碼很簡單,我就不貼出來了,TimePickerDialog中使用了TimePicker,TimePicker的源碼在:frameworks\base\core\java\android\widget。在其構造函數中:

public TimePicker(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {super(context, attrs, defStyleAttr, defStyleRes);final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TimePicker, defStyleAttr, defStyleRes);final int mode = a.getInt(R.styleable.TimePicker_timePickerMode, MODE_SPINNER);a.recycle();switch (mode) {case MODE_CLOCK:mDelegate = new TimePickerClockDelegate(this, context, attrs, defStyleAttr, defStyleRes);break;case MODE_SPINNER:default:mDelegate = new TimePickerSpinnerDelegate(this, context, attrs, defStyleAttr, defStyleRes);break;}}

可以看到TimePicker有兩種模式:MODE_CLOCK和MODE_SPINNER。我猜想我需要的是spinner,所以我就在這里強制把mode配置為MODE_SPINNER,然后更新完系統Jar包后發現果不其然,這個時候TimePickerDialog變成了這樣:

這時候可以看到明顯變了一種模式,但是這種模式還不是我想要的,于是我百度TimePickerDialog主題配置,但令我失望的是并沒有找到相關的內容,于是我嘗試配置TimePickerDialog構造函數的第二個樣式,也就是給TimePickerDialog指定特定的Theme,果然,每次指定完后發現TimePickerDialog的樣子都有變化,當我把它配置為

android.R.style.Theme_DeviceDefault_Light_Dialog時,我想要的效果出現了,也就是開始的第一張照片所展示的樣式。這個時候,回過頭來,很明顯在代碼中給TimePickerm 指定特定的樣式不是明智的選擇,通過查看源碼發現TimePicker的構造函數中獲取mode的方式是: final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TimePicker, defStyleAttr, defStyleRes); final int mode = a.getInt(R.styleable.TimePicker_timePickerMode, MODE_SPINNER); 從這里可以看出可以看到系統給TimerPicker自定義了屬性:timePickerMode,如果這里看不明白,可以百度下view自定義屬性試試。然后在res/value/attr.xml文件中搜索該變量,可以看到: <attr name="timePickerMode"><!-- Time picker with spinner controls to select the time. --><enum name="spinner" value="1" /><!-- Time picker with clock face to select the time. --><enum name="clock" value="2" /> </attr>

這意味著可以在xml文件中給TimePicker指定特定的模式,就像文章開頭做的那樣。如此,就實現了自己想要的TimePickerDialog的樣式。

轉載于:https://www.cnblogs.com/zhujiabin/p/6102176.html

總結

以上是生活随笔為你收集整理的Android TimePickerDialog样式配置与TimePicker模式选择的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。