首页 > 解决方案 > 如何构建一个在拉伸时显示更多按钮的 android 小部件?

问题描述

我需要启动一个按钮小部件。一旦启动,当我拉伸宽度时,我希望能够再显示两个按钮。类似于下图。我将从小部件 [A] 开始。一旦我伸展,我希望能够看到 [B] 和 [C]。当我调整大小时,我只想显示单个小部件。我想避免构建两个不同的小部件。我尝试根据小部件宽度何时调整大小来更改其他两个按钮的可见性。

布局大小 1 * 3 网格。当我隐藏这 2 个按钮时,我在该布局中留下了 2 个网格的空白空间。

谢谢您的帮助!

覆盖乐趣 onAppWidgetOptionsChanged(context: Context?, appWidgetManager: AppWidgetManager?, appWidgetId: Int, newOptions: Bundle?) { val remoteViews = RemoteViews(context?.packageName, R.layout.coffee_logger_widget)

    val minWidth = newOptions?.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH)
    val maxWidth = newOptions?.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH)
    val minHeight = newOptions?.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT)
    val maxHeight = newOptions?.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT)

    if (minWidth != null) {
        if (minWidth > 100) {
            remoteViews.setViewVisibility(R.id.espresso_button, View.VISIBLE)
            remoteViews.setViewVisibility(R.id.long_button, View.VISIBLE)
        } else {
            remoteViews.setViewVisibility(R.id.espresso_button, View.GONE)
            remoteViews.setViewVisibility(R.id.long_button, View.GONE)
        }
    }

    appWidgetManager?.updateAppWidget(appWidgetId, remoteViews)

}

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/widget_layout"
android:orientation="vertical"
android:gravity="center"
android:animateLayoutChanges="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
android:padding="@dimen/widget_margin">

<TextView style="@style/WidgetButtonVerticalSpace" />

<TextView
    android:id="@+id/appwidget_text"
    style="@style/WidgetTextView.Big" />

<TextView
    style="@style/WidgetTextView"
    android:text="@string/grams" />

<TextView style="@style/WidgetButtonVerticalSpace" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView style="@style/WidgetButtonHorizontalSpace" />

    <LinearLayout
        android:id="@+id/ristretto_button"
        style="@style/WidgetBeverageButton" >

        <ImageView
            style="@style/WidgetButtonImage"
            android:src="@drawable/ic_ristretto" />
        <TextView
            style="@style/WidgetButtonText"
            android:text="@string/ristretto_short" />
    </LinearLayout>

    <TextView style="@style/WidgetButtonHorizontalSpace" />


    <LinearLayout
        android:id="@+id/espresso_button"
        android:visibility="gone"
        style="@style/WidgetBeverageButton"
        tools:visibility="visible">

        <ImageView
            style="@style/WidgetButtonImage"
            android:src="@drawable/ic_espresso" />
        <TextView
            style="@style/WidgetButtonText"
            android:text="@string/espresso_short" />

    </LinearLayout>

    <TextView style="@style/WidgetButtonHorizontalSpace" />

    <LinearLayout
        android:id="@+id/long_button"
        android:visibility="gone"
        style="@style/WidgetBeverageButton"
        tools:visibility="visible">

        <ImageView
            style="@style/WidgetButtonImage"
            android:src="@drawable/ic_long_coffee" />
        <TextView
            style="@style/WidgetButtonText"
            android:text="@string/long_coffee_short" />

    </LinearLayout>



    <TextView style="@style/WidgetButtonHorizontalSpace" />


    <!-- Buttons go here -->

</LinearLayout>

<TextView style="@style/WidgetButtonVerticalSpace" />

<TextView
    android:id="@+id/coffee_quote"
    style="@style/WidgetQuote" />

在此处输入图像描述

标签: javaandroidkotlinwidget

解决方案


您需要将 B 和 C 设置visibilityGONE,这将使它们从布局中“消失”,因此它可以缩小到仅包含A.

顺便说一句,如果您添加animateLayoutChanges = "true"到该布局的 XML,按钮将很好地淡入和淡出,并且布局将拉伸和收缩。您可能需要更改您的订单BC VISIBLE使其GONE看起来正确,具体取决于您正在做什么

哦,另外,这也取决于你的布局——它需要layout_width = "wrap_content"这样它才能收缩以包裹剩余的A. 如果您使用GridLayout具有固定大小的 a,则需要在代码中更改该宽度,或使用 aLinearLayout或复制其外观ConstraintLayout。这取决于你实际在做什么!


推荐阅读