android - 无法匹配父自定义对话框的宽度
问题描述
我创建了一个自定义对话框并将宽度定义为match_parent
. 但是当我运行该应用程序时,它似乎甚至没有包装内容,因为大部分内容都被剪裁了。我尝试了一些解决方案,但得到了相同的结果,我不知道我做错了什么:
dialog_messages.xml
<com.google.android.material.card.MaterialCardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:cardCornerRadius="@dimen/corner"
app:cardElevation="@dimen/elevation"
app:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_msg_sm"
android:drawablePadding="@dimen/normal"
android:drawableTint="@color/colorDanger"
android:padding="@dimen/normal_2x"
android:text="Send Message"
android:textColor="@color/colorBlack"
android:textStyle="bold" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorGrey" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/normal_2x"
android:text="Tap a message to send"
android:textColor="@color/colorGrey"
android:textSize="@dimen/font_sm1" />
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/normal_2x" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:background="@color/colorGrey" />
<Button
android:id="@+id/btnCancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="@dimen/normal"
android:background="@null"
android:paddingHorizontal="@dimen/normal_4x"
android:text="Cancel"
android:textColor="@color/colorDanger" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
和设置类
消息对话框.kt
class MessageDialog(
private val activity: Activity,
private val onMessageClickListener: MessageClickListener
) : Dialog(activity) {
private val messageList = arrayListOf<String>(
"Can't locate you. Send instructions",
"Heavy Traffic. I'll be late 10 minutes",
"Just turning around the block",
"Taxi arrived",
"I am coming to your location",
"I am arriving in 5 minutes",
"Ok"
)
private lateinit var listView: ListView
private lateinit var btnCancel: Button;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
requestWindowFeature(Window.FEATURE_NO_TITLE)
setContentView(R.layout.dialog_messages)
val adapter = ArrayAdapter(activity, android.R.layout.simple_list_item_1, messageList)
listView = findViewById(R.id.listView)
listView.adapter = adapter
listView.setOnItemClickListener { parent, view, position, id ->
onMessageClickListener.onMessageClick(messageList.get(position))
dismiss()
}
btnCancel = findViewById(R.id.btnCancel)
btnCancel.setOnClickListener {
dismiss()
}
}
}
解决方案
创建一个 Dialog 对象并在 show() 部分执行此操作。
val dialog = MessageDialog(activity, messageClickListener)
val lp = WindowManager.LayoutParams()
lp.copyFrom(dialog.window!!.attributes)
lp.width = WindowManager.LayoutParams.MATCH_PARENT
lp.height = WindowManager.LayoutParams.WRAP_CONTENT
dialog.show()
val window = dialog.window
window!!.attributes = lp
推荐阅读
- java - 具有许多参数的方法 (Sonarlint)
- reactjs - 使用 React Native WebView 获取“来源:错误”
- api - 进行集成测试时如何绕过所有服务调用的 [Authorize(Roles = "Admin")] 标签?
- c++ - 我如何知道 valgrind 错误是由我的代码还是由我的代码所依赖的某个库引起的?
- python - 我有 2 行,1 行用于时间戳,1 行用于状态“200 ok”和“未找到”,如何获得超过 1% 的错误
- ansible - 角色复制和执行仅适用于第一个角色输入
- r - R dplyr 使用包含列索引的计算转换列数据
- sql - SQLite:在另一个子查询中使用子查询结果
- excel - INDEX 的标准截止值
- google-chrome - 如何查看当前在 Chrome 页面内存中的文件?