我试图膨胀和显示一个具有特定高度的LinearLayout,但当显示高度时总是转换为wrap_content。我的布局是:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="@dimen/dialog_title_height"
android:padding="@dimen/default_padding">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:text="Scan for devices" />
<ProgressBar
android:id="@+id/progressBarScanning"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
一开始看起来很好,但是当我将ProgressBar
可见度设置为View.GONE
时,布局高度会缩小到TextView的大小,这比父布局上的layout_height
小得多。
但是,如果我用指定的高度在第二个LinearLayout中包装视图,并将父元素设置为wrap_content
,那么它就可以正常工作了。这样的:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/default_padding">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dialog_title_height">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:text="Scan for devices" />
<ProgressBar
android:id="@+id/progressBarScanning"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
但是现在AndroidStudio抱怨第二个LinearLayout
是无用的。
正确的方法是什么?
您可以为特定对象设置权重,而不是线性布局。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/default_padding">
<TextView
android:layout_width="0dp"
android:layout_height="@dimen/dialog_title_height"
android:gravity="center_vertical"
android:text="Scan for devices" />
<ProgressBar
android:id="@+id/progressBarScanning"
android:layout_width="wrap_content"
android:layout_height="@dimen/dialog_title_height" />
</LinearLayout>