簡體   English   中英

三星Galaxy S7 Edge忽略datePickerMode

[英]Samsung Galaxy S7 Edge ignores datePickerMode

我將樣式文件中的datePickerMode設置為spinner如下所示:

<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上的Samsung Galaxy S7 Edge)上都可以正常工作,但是由於將設備更新為Android 7,因此它會忽略模式spinner並顯示日歷。

微調器可以在Android 7.1.1的One Plus 3上正常工作。
有任何想法嗎?

您可能會遇到此問題(#37120178)datepicker 對話框無法在Android 7.0設備上切換到Spinner 如果是這樣,該頁面上記錄了解決方法。 我沒有嘗試解決方法,但是值得一試。 (有關變通辦法的實施,請參見下文。)

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

這是該解決方案要點


奇怪,但是錯誤報告中的那些修復似乎是針對時間選擇器的,盡管該報告是針對日期選擇器的。 我仔細研究了一下,發現使用API​​ 24中的DatePicker微調器可以解決問題。 同樣,我沒有嘗試過。

這種反射邏輯確實起作用了。 它為我顯示了微調器在日歷視圖旁邊。 如果只需要微調器,則需要在樣式中添加以下內容:

<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());
        }

你可以試試看

datePicker.setCalendarViewShown(false);

由於Android 7.0,您應該嘗試將targetSdkVersion提升至24

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM