Кнопки диалога не отображаются в Android 8.1 - PullRequest
1 голос
/ 21 июня 2019

У меня есть пользовательский класс AlertDialog, где у меня есть несколько функций, которые вызываются в init, зависит от входных данных. Он создаст пользовательский AlertDialog с пользовательским макетом и установит кнопки и его слушателей. Тогда это покажет диалог. В некоторых из них он работает, но в Android 8.1 я не вижу этих кнопок по умолчанию. Я думал, что это так, потому что пользовательский макет LinearLayout с width и height установлен на match_parent. Если я установлю его на wrap_content, его все равно не будет видно.

Также в моем макете AlertDialog есть RecyclerView.

Я нашел несколько сообщений об этой проблеме, которые могут быть вызваны не установкой Dialog Theme в styles, но это не мой случай, потому что мне пришлось использовать пользовательскую тему, чтобы иметь полноэкранный диалог.

Одна из моих функций, определяющих AlertDialog:

private fun modemDialogInit(msg: Int, finish: Int, cntinue: Int){
        val dialogView: View = layoutInflater.inflate(R.layout.rev_report_dialog_modem, null)

        initRecyclerView(dialogView)

        val radioView: RadioGroup = dialogView.findViewById(R.id.hp_radioView)
        val radioOne: RadioButton = dialogView.findViewById(R.id.one_year)

        setMessage(a.getString(msg))
        setButton(DialogInterface.BUTTON_POSITIVE, a.getText(finish)) { _, _ ->}
        setCancelButton()
        if (a is ModemActivity) setNeutralButton(cntinue)
        setView(dialogView)
        create()

        setOnShowListener {
            val button = getButton(BUTTON_POSITIVE)
            button.setOnClickListener {
                changeDialogButtonStates(false)

                val modemEndDate: Date
                if (radioView.checkedRadioButtonId == radioOne.id){
                    modemEndDate = sdf.parse(sdf.format(Api.getDateNYearsFromNow(1)))
                } else {
                    modemEndDate = sdf.parse(sdf.format(Api.getDateNYearsFromNow(2)))
                }

                if (a is ModemActivty){
                    modemEntity.modem.put(MODEM_REPORT_CURRENT_NUM_OF_ITEMS, modemItemsNum)
                    a.saveModem(
                        modemEndDate,
                        modemEntity,
                        this,
                        getButton(DialogInterface.BUTTON_POSITIVE),
                        getButton(DialogInterface.BUTTON_NEGATIVE),
                        getButton(DialogInterface.BUTTON_NEUTRAL))
                } else if (a is ModemCheckedActivity){
                    innerModemEntity.put(MODEM_REPORT_CURRENT_NUM_OF_ITEMS, modemItemsNum)
                    a.saveModemChecked(
                        modemEndDate,
                        innerRModemEntity,
                        this,
                        getButton(DialogInterface.BUTTON_POSITIVE),
                        getButton(DialogInterface.BUTTON_NEGATIVE))
                }
            }
        }

        show()
    }

Это тема, используемая для моего AlertDialog:

<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">match_parent</item>

        <!-- No backgrounds, titles or window float -->
        <item name="android:windowBackground">@color/colorText</item>
        <item name="android:textColor">@color/colorPrimaryDark</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">false</item>
        <item name="borderlessButtonStyle">@style/Widget.AppCompat.Button.Borderless.Colored</item>
    </style>

Скриншот из превью:

enter image description here

...