Почему диалоговое окно TimePicker пусто на Samsung Marshmallow 6.0.1?

В Lollipop 5.1.1 на Nexus 4 и в Marshmallow 6.0.1 на эмуляторе TimePickerDialog появляется в моем приложении, выглядя так:

Однако на Samsung S6 Edge с Marshmallow 6.0.1 это выглядит так:

полностью пустой.

TimePickerDialog инициализируется следующим образом:

Calendar calendar = Calendar.getInstance();
Dialog timeDialog = new TimePickerDialog(androidContext, this, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true);
timeDialog.setTitle("Set Appointment Time");
timeDialog.show();

person uvdevops    schedule 29.07.2016    source источник
comment
У меня такая же проблема.   -  person Reagan Gallant    schedule 20.09.2016


Ответы (1)


Я не знаю, почему это происходит, но я обошел эту проблему, используя решение, предоставленное cirit здесь. Он решает другую проблему, но решает и эту проблему.

Решение, предлагаемое cirit, состоит в том, чтобы поместить виджет TimePicker в AlertDialog. Моя реализация его/ее решения выглядит так:

private void showTimePicker() {

    // This is implemented using an AlertDialog and a TimePicker instead of a TimePickerDialog
    // because the TimePickerDialog implementation on Samsung does not work.
    final Calendar c = Calendar.getInstance();
    c.setTimeInMillis(getInternalTimestamp());

    final TimePicker timePicker = new TimePicker(mContext);
    timePicker.setIs24HourView(DateFormat.is24HourFormat(mContext));
    timePicker.setCurrentHour(c.get(Calendar.HOUR_OF_DAY));
    timePicker.setCurrentMinute(c.get(Calendar.MINUTE));

    final AlertDialog timePickerDialog = new AlertDialog.Builder(mContext)
            .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // user clicked OK - store the result, perhaps by using a callback:
                    // myCallback.onTimeSet(timePicker, timePicker.getHour(), timePicker.getMinute();
                }
            })
            .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            })
            .setView(timePicker).show();
}

Некрасиво, но работает (для меня) и не так безобразно, как я опасался.

person Anton Epp    schedule 14.10.2016