膨胀 ConstraintLayout 在某些设备上崩溃
Inflating ConstraintLayout crashes on some devices
我有一个 xml-layout 在某些设备上工作但在其他设备上膨胀时崩溃(xml-代码只显示部分):
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
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:id="@+id/constraintLayout_record_audio"
android:minWidth="@android:dimen/dialog_min_width_major"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
膨胀布局在某些设备上工作正常,但在其他设备上会导致 InflateException
。
我在我的 xml- 文件中找到了罪魁祸首:
<!-- Causes InflateException on some devices:
android:minWidth="@android:dimen/dialog_min_width_major" -->
不幸的是,删除导致 InflateException
的行后,android:layout_height="wrap_content"
不再起作用。
layout_height
总是像设置为 "match_parent"
一样呈现。关于发生了什么以及如何解决这个问题的任何想法?
为清楚起见添加
这是我调用对话框的方式:
fun showRecordAudioDialog(view: View, categoryId: String, detailId: String) {
val dialog = RecordAudioDialogFragment.newInstance(categoryId, detailId)
dialog.show(this@DetailsActivity.supportFragmentManager, "RecordAudioDialog")
}
在我的 RecordAudioDialogFragment 中:
// Use the Builder class for convenient dialog construction
val builder = AlertDialog.Builder(activity, style.CustomTheme_Dialog)
val inflater = activity.layoutInflater
val rootView = inflater.inflate(layout.dialog_record_audio, null)
由于某些奇怪的原因,如果未设置 android:minWidth
,android:layout_height
将不起作用。
所以,在 dimens.xml
我们需要添加一行
<dimen name="dialog_min_with">500dp</dimen>
然后将 android:minWidth="@dimen/dialog_min_with"
添加到我们的 mylayout.xml
文件中。
layout.xml 文件的头部现在是这样的:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/constraintLayout_record_audio"
android:minWidth="@dimen/dialog_min_with"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
我有一个 xml-layout 在某些设备上工作但在其他设备上膨胀时崩溃(xml-代码只显示部分):
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
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:id="@+id/constraintLayout_record_audio"
android:minWidth="@android:dimen/dialog_min_width_major"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
膨胀布局在某些设备上工作正常,但在其他设备上会导致 InflateException
。
我在我的 xml- 文件中找到了罪魁祸首:
<!-- Causes InflateException on some devices:
android:minWidth="@android:dimen/dialog_min_width_major" -->
不幸的是,删除导致 InflateException
的行后,android:layout_height="wrap_content"
不再起作用。
layout_height
总是像设置为 "match_parent"
一样呈现。关于发生了什么以及如何解决这个问题的任何想法?
为清楚起见添加
这是我调用对话框的方式:
fun showRecordAudioDialog(view: View, categoryId: String, detailId: String) {
val dialog = RecordAudioDialogFragment.newInstance(categoryId, detailId)
dialog.show(this@DetailsActivity.supportFragmentManager, "RecordAudioDialog")
}
在我的 RecordAudioDialogFragment 中:
// Use the Builder class for convenient dialog construction
val builder = AlertDialog.Builder(activity, style.CustomTheme_Dialog)
val inflater = activity.layoutInflater
val rootView = inflater.inflate(layout.dialog_record_audio, null)
由于某些奇怪的原因,如果未设置 android:minWidth
,android:layout_height
将不起作用。
所以,在 dimens.xml
我们需要添加一行
<dimen name="dialog_min_with">500dp</dimen>
然后将 android:minWidth="@dimen/dialog_min_with"
添加到我们的 mylayout.xml
文件中。
layout.xml 文件的头部现在是这样的:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/constraintLayout_record_audio"
android:minWidth="@dimen/dialog_min_with"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">