Android Widget可见性策略

时间:2016-08-12 00:06:55

标签: android android-layout

我正面临着一个我正在努力解决的问题。

我的布局2小部件。一个ImageView和一个ProgressBar(不确定)。

我希望在我的ImageView图像加载之前显示进度条。

问题是ImageView填充了所有区域,Progressbar有特定的大小。当我将进度条可见性设置为INVISIBLE或GONE时,进度条不再出现,但是她的尺寸仍然填满了某个区域,这使得Imageview没有填满所有区域。

如何设置进度条不可见并将ImageView放在顶部?

布局

<LinearLayout
    android:id="@+id/linear_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bck_card_layout"
    android:orientation="vertical"
    android:padding="2dp"
    android:weightSum="1">

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawableEnd="@drawable/ic_medal"
        android:drawablePadding="12dp"
        android:fontFamily="sans-serif-light"
        android:paddingBottom="8dp"
        android:paddingEnd="12dp"
        android:paddingStart="12dp"
        android:paddingTop="8dp"
        android:singleLine="true"
        android:textColor="@color/textPrimary"
        android:textSize="@dimen/text_regular" />

    <View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@color/colorAccent" />


    <ProgressBar
        android:id="@+id/card_progressbar"
        android:visibility="visible"
        android:layout_gravity="center_horizontal|center_vertical"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:indeterminate="true" />


    <ImageView
        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:scaleType="centerCrop" />

    <View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@color/colorAccent" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingEnd="12dp"
        android:paddingStart="12dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start|center_vertical"
            android:fontFamily="sans-serif-light"
            android:paddingBottom="6dp"
            android:paddingTop="6dp"
            android:text="@string/lunch_per_kilo"
            android:textColor="@color/textPrimary"
            android:textSize="@dimen/text_regular" />

        <TextView
            android:id="@+id/price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end|center_vertical"
            android:ellipsize="start"
            android:paddingStart="116dp"
            android:singleLine="true"
            android:textColor="@color/textSecondary"
            android:textSize="@dimen/text_xlarge"
            android:textStyle="bold" />
    </FrameLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:background="@color/colorAccent" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingEnd="12dp"
        android:paddingStart="12dp">

        <TextView
            android:id="@+id/valid_until"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="start|center_vertical"
            android:drawablePadding="8dp"
            android:drawableStart="@drawable/ic_flash"
            android:fontFamily="sans-serif-light"
            android:gravity="center_vertical"
            android:includeFontPadding="false"
            android:paddingBottom="8dp"
            android:paddingTop="8dp"
            android:textColor="@color/textPrimary"
            android:textSize="@dimen/text_small"
            android:textStyle="italic" />

        <TextView
            android:id="@+id/like_counter"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="end|center_vertical"
            android:drawablePadding="8dp"
            android:drawableStart="@drawable/ic_heart_24dp"
            android:fontFamily="sans-serif-thin"
            android:singleLine="true"
            android:textColor="@color/textSecondary"
            android:textSize="@dimen/text_regular" />
    </FrameLayout>
</LinearLayout>

1 个答案:

答案 0 :(得分:0)

您应该尝试使用包含在ImageView和ProgressBar中的FrameLayout。

<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">

<ImageView
    android:id="@+id/image"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:scaleType="centerCrop" />

<ProgressBar
    android:id="@+id/card_progressbar"
    android:visibility="visible"
    android:layout_gravity="center_horizontal|center_vertical"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:indeterminate="true" />

</FrameLayout>

现在您可以隐藏和显示ProgressBar。