2017-06-06 69 views
1

我設置在我的風格datePickerMode文件到spinner這樣的:三星Galaxy S7邊緣忽略datePickerMode

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="android:dialogTheme">@style/MyDialogTheme</item> 
    <item name="android:datePickerStyle">@style/MyDatePicker</item> 
</style> 

<style name="ItvDialogTheme" parent="android:Theme.Material.Light.Dialog"> 
    <item name="android:datePickerStyle">@style/MyDatePicker</item> 
</style> 

<style name="MyDatePicker" parent="android:Widget.Material.Light.DatePicker"> 
    <item name="android:datePickerMode">spinner</item> 
</style> 

,然後創建一個datepicker

DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() { 
    @Override 
    public void onDateSet(final DatePicker view, final int year, final int monthOfYear, final int dayOfMonth) { 
     //handle result 
     } 
    }; 

DatePickerDialog dialog = new DatePickerDialog(this, onDateSetListener, dob.getYear(), dob.getMonth() - 1, 
      dob.getDay()); 

dialog.show(); 

這跨越了很多設備運行良好包括Android 6上的三星Galaxy S7 Edge,但是由於將設備更新爲Android 7,它忽略了模式spinner並顯示日曆。

微調框在Android 7.1.1上的One Plus 3上正常工作。
任何想法?

回答

1

的你可能會遇到這個問題,(#37120178)datepicker dialog can't switch to spinner on Android 7.0 device。如果是這樣,那麼在該頁面上記錄了一個解決方法。 我還沒有嘗試解決方法,但它可能值得一試。(請參閱下面的解決方法)

順便說一句,我有一個運行7.0的三星S7(不是邊緣)。如果我用XML定義它,我可以得到一個DatePicker微調框,所以另一個解決方法是用XML定義DatePicker微調框並在對話框中使用它。

這是gist of this solution


有點奇怪,但那些bug報告中的修復似乎是針對時間選擇器,雖然報告是針對日期選擇器的。我挖了一下,發現Use DatePicker spinners in API 24是一個潛在的修復。 再次,我沒有試過這個。

這個反射邏輯看起來可行。它爲我展示了日曆視圖旁邊的微調器。如果你想只是微調,則需要將以下內容添加到您的風格:

<item name="android:calendarViewShown">false</item> 

(信用這項工作,各地去lognatureljeffdgr8)。

這裏是我的自定義DatePickerDialog看起來像反射邏輯:

public class MyReflectionDatePickerDialog extends DatePickerDialog { 

    private DatePicker mDatePicker; 

    @RequiresApi(api = Build.VERSION_CODES.N) 
    public MyReflectionDatePickerDialog(@NonNull Context context, @Nullable OnDateSetListener listener, 
             int year, int month, int dayOfMonth) { 
     super(context, listener, year, month, dayOfMonth); 
     fixSpinner(context, year, month, dayOfMonth); 

    } 

    // include gist here from: 
    // https://gist.github.com/lognaturel/232395ee1079ff9e4b1b8e7096c3afaf 
} 

你會實例化這個自定義視圖,如下圖所示:

 DatePickerDialog dialog; 
     if (Build.VERSION.SDK_INT == Build.VERSION_CODES.N) { 
      dialog = new MyDatePickerDialog(this, onDateSetListener, dob.getYear(), 
       dob.getMonth() - 1, dob.getDay()); 
     } else { 
      dialog = new DatePickerDialog(this, onDateSetListener, dob.getYear(), 
       dob.getMonth() - 1, dob.getDay()); 
     } 

+0

謝謝,這個作品很棒! – Altoyyr

-1

你可以試試這個。

datePicker.setCalendarViewShown(false);

+1

此方法已與評論'不支持Material風格{@code日曆}模式' – Altoyyr

-1

你應該儘量提高 targetSdkVersion到24,因爲在Android 7.0

+1

爲什麼?他想支持舊版本......任何其他隨機想法? – Selvin