【问题标题】:Android Widget Visibility strategyAndroid Widget 可见性策略
【发布时间】:2016-12-18 21:00:25
【问题描述】:

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

我的布局 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>

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    您应该尝试使用包含在 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。

    【讨论】:

    • 我的主 ViewGroup 是 FrameLayout,但在里面我有一个 LinearLayout,我的进度条在里面。
    • 你能发布你的xml吗?
    • 当然,我编辑了我的问题并包含了布局
    猜你喜欢
    • 2021-05-18
    • 1970-01-01
    • 2020-12-06
    • 2013-06-17
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 2017-11-15
    相关资源
    最近更新 更多