Android LinearLayout的静态高度转换为wrap_content



我试图膨胀和显示一个具有特定高度的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>

最新更新