Системный темный режим переопределяет мое окно системных предупреждений

#android #android-layout

Вопрос:

Я реализовал окно системного оповещения, и у этого окна есть свой собственный пользовательский интерфейс. Но когда включен темный режим, то этот макет переопределяет цвета, которые я дал.

 private fun showAlert(context: Context,message:String){  val builder: AlertDialog.Builder = AlertDialog.Builder( ContextThemeWrapper(context, R.style.RigTheme))  val inflater: LayoutInflater = LayoutInflater.from(context)  val dialogView: View = inflater.inflate(R.layout.layout_rig_alert, null)      dialogView.findViewByIdlt;TextViewgt;(R.id.tvMessage).text = message   builder.setView(dialogView)  val alert: AlertDialog = builder.create()   val window = alert.window ?: return  window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))  window.requestFeature(Window.FEATURE_NO_TITLE)  val layoutFlag: Int = if (Build.VERSION.SDK_INT gt;= Build.VERSION_CODES.O) {  WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY  } else {  WindowManager.LayoutParams.TYPE_PHONE  }  window.setType(layoutFlag)  alert.setCanceledOnTouchOutside(false)   alert.show()  val lp: WindowManager.LayoutParams = WindowManager.LayoutParams()   window.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)  window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)  window.setGravity(Gravity.CENTER)  lp.copyFrom(window.attributes)  //This makes the dialog take up the full width  //This makes the dialog take up the full width  lp.width = WindowManager.LayoutParams.WRAP_CONTENT  lp.height = WindowManager.LayoutParams.WRAP_CONTENT  window.attributes = lp    // Click stuff  }  

И стиль

 lt;style name="RigTheme" parent="Theme.AppCompat.Light.Dialog.Alert"gt;  lt;item name="colorAccent"gt;@color/light_redlt;/itemgt;  lt;item name="android:background"gt;@color/whitelt;/itemgt;  lt;item name="android:textColorPrimary"gt;@color/txt_greylt;/itemgt;  lt;item name="android:windowBackground"gt;@android:color/transparentlt;/itemgt;  lt;item name="android:windowIsTranslucent"gt;truelt;/itemgt;  lt;/stylegt;  

расположение

 lt;?xml version="1.0" encoding="utf-8"?gt; lt;androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" app:cardElevation="10dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"gt;  lt;androidx.constraintlayout.widget.ConstraintLayout  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:background="@drawable/curve_bg"  android:padding="10dp"  app:layout_constraintBottom_toBottomOf="parent"  app:layout_constraintEnd_toEndOf="parent"  app:layout_constraintStart_toStartOf="parent"  app:layout_constraintTop_toTopOf="parent"gt;   lt;ImageView  android:id="@ id/iv_close"  android:layout_width="24dp"  android:layout_height="24dp"  android:src="@drawable/close"  app:layout_constraintEnd_toEndOf="parent"  app:layout_constraintTop_toTopOf="parent" /gt;   lt;TextView  android:id="@ id/tvTitle"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="@string/warning"  android:textColor="@color/light_red"  android:textSize="30sp"  app:layout_constraintEnd_toEndOf="parent"  app:layout_constraintStart_toStartOf="parent"  app:layout_constraintTop_toBottomOf="@ id/iv_close" /gt;   lt;TextView  android:id="@ id/tvMessage"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:layout_marginTop="10dp"  android:padding="20dp"  android:textColor="@color/txt_grey"  android:textSize="18sp"  app:layout_constraintEnd_toEndOf="parent"  app:layout_constraintStart_toStartOf="parent"  app:layout_constraintTop_toBottomOf="@ id/tvTitle" /gt;   lt;Button  android:id="@ id/btnCancel"  android:layout_width="100dp"  android:layout_height="40dp"  android:layout_marginStart="16dp"  android:layout_marginEnd="16dp"  android:background="@drawable/button_rect_un_selected"  android:text="@string/cancel"  android:textAllCaps="false"  android:textColor="@color/txt_grey"  app:layout_constraintEnd_toStartOf="@ id/btnDoit"  app:layout_constraintHorizontal_bias="0.5"  app:layout_constraintStart_toStartOf="parent"  app:layout_constraintTop_toBottomOf="@id/tvMessage" /gt;   lt;Button  android:id="@ id/btnDoit"  android:layout_width="100dp"  android:layout_height="40dp"  android:layout_marginStart="16dp"  android:layout_marginEnd="16dp"  android:background="@drawable/button_rect_selected"  android:text="@string/do_it_now"  android:textAllCaps="false"  android:textColor="@color/white"  app:layout_constraintEnd_toEndOf="parent"  app:layout_constraintHorizontal_bias="0.5"  app:layout_constraintStart_toEndOf="@ id/btnCancel"  app:layout_constraintTop_toBottomOf="@id/tvMessage" /gt; lt;/androidx.constraintlayout.widget.ConstraintLayoutgt; lt;/androidx.cardview.widget.CardViewgt;  

I have 2 issues with this code.

Issue 1

The dark mode is overriding the colour combination

original UI required Ui

когда включен темный режим переопределение темного режима

Выпуск 2

Мне нужно выровнять виджеты по центру. Я дал WRAP_CONTENT, но диалоговое окно занимает большую часть ширины экрана. и, конечно же, виджеты выровнены по левому краю.

Ответ №1:

проверьте этот совет в документах:

Совет: Если вам нужен пользовательский диалог, вы можете вместо этого отображать действие как диалоговое окно, а не использовать диалоговые интерфейсы API. Просто создайте действие и установите его тему на Theme.Holo.Диалоговое окно в элементе манифеста:

 lt;activity android:theme="@android:style/Theme.Holo.Dialog" gt;  

Это оно. Действие теперь отображается в диалоговом окне, а не в полноэкранном режиме.

Я не пробовал, но я думаю, что внутри действия будет проще размещать ваши взгляды без проблем с выравниванием, также вы можете указать легкую тему с помощью Theme.Holo.Свет.Диалог.