У меня есть пользовательский класс 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>
Скриншот из превью:
