【发布时间】:2022-01-06 05:58:57
【问题描述】:
我已经实现了一个系统警报窗口,并且该窗口有自己的 UI。但是当启用暗模式时,该布局会覆盖我给出的颜色。
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.findViewById<TextView>(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 >= 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
}
还有风格
<style name="RigTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">@color/light_red</item>
<item name="android:background">@color/white</item>
<item name="android:textColorPrimary">@color/txt_grey</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
</style>
布局
<?xml version="1.0" encoding="utf-8"?>
<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">
<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">
<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" />
<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" />
<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" />
<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" />
<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" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
我对这段代码有 2 个问题。
问题 1
深色模式覆盖颜色组合
问题 2
我需要在中心对齐小部件。我已经给出了 WRAP_CONTENT,但对话框占用了大部分屏幕宽度。当然,小部件是左对齐的。
【问题讨论】: