Android - 使对话框的背景部分可用
Android - Make the background part of the Dialog available
我正在创建一个 AlertDialog,如下所示。
- 我将对话框视图固定在屏幕底部。平均宽度:400,高度:200 维。 (实际上我希望它是类似 Admob-banner 的东西)
- 我总是希望以 show () 开始的屏幕保持可见,并且对话框后面的屏幕可用。所以我让背景对用户透明。
但是,有一个问题。无法单击对话框背景。当对话框保留在屏幕上时,如何使背景可用?另外,我不想在用户使用后台时关闭对话框。
TestBannerDialog.kt
import android.app.AlertDialog
import android.app.Dialog
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.os.CountDownTimer
import android.view.Gravity
import android.view.View
import android.view.WindowManager
class TestBannerDialog(context: Context) : Dialog(context, false, null) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.test_banner_dialog)
setCanceledOnTouchOutside(false)
window?.let {
it.attributes.gravity = Gravity.BOTTOM
it.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
}
}
}
test_banner_dialog.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="24dp">
<ImageView ....... />
<TextView ....... />
</androidx.constraintlayout.widget.ConstraintLayout>
这样您就可以使用一些东西,然后将它添加到您希望它出现的屏幕布局中。
class TestBannerView @JvmOverloads constructor(context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0,
defStyleRes: Int = 0) : FrameLayout(context, attrs, defStyle, defStyleRes) {
init {
LayoutInflater.from(context).inflate(R.layout.test_banner_view, this, true)
}
}
我认为最好使用另一个视图并将其隐藏并显示而不是使用对话框,但是如果您希望对话框在单击时不关闭,请使用此代码
dialog.setCanceledOnTouchOutside(假);
我正在创建一个 AlertDialog,如下所示。
- 我将对话框视图固定在屏幕底部。平均宽度:400,高度:200 维。 (实际上我希望它是类似 Admob-banner 的东西)
- 我总是希望以 show () 开始的屏幕保持可见,并且对话框后面的屏幕可用。所以我让背景对用户透明。
但是,有一个问题。无法单击对话框背景。当对话框保留在屏幕上时,如何使背景可用?另外,我不想在用户使用后台时关闭对话框。
TestBannerDialog.kt
import android.app.AlertDialog
import android.app.Dialog
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.os.CountDownTimer
import android.view.Gravity
import android.view.View
import android.view.WindowManager
class TestBannerDialog(context: Context) : Dialog(context, false, null) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.test_banner_dialog)
setCanceledOnTouchOutside(false)
window?.let {
it.attributes.gravity = Gravity.BOTTOM
it.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
}
}
}
test_banner_dialog.xml
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="24dp">
<ImageView ....... />
<TextView ....... />
</androidx.constraintlayout.widget.ConstraintLayout>
这样您就可以使用一些东西,然后将它添加到您希望它出现的屏幕布局中。
class TestBannerView @JvmOverloads constructor(context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0,
defStyleRes: Int = 0) : FrameLayout(context, attrs, defStyle, defStyleRes) {
init {
LayoutInflater.from(context).inflate(R.layout.test_banner_view, this, true)
}
}
我认为最好使用另一个视图并将其隐藏并显示而不是使用对话框,但是如果您希望对话框在单击时不关闭,请使用此代码
dialog.setCanceledOnTouchOutside(假);