java - 如何构建一个在拉伸时显示更多按钮的 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" />
解决方案
您需要将 B 和 C 设置visibility
为GONE
,这将使它们从布局中“消失”,因此它可以缩小到仅包含A
.
顺便说一句,如果您添加animateLayoutChanges = "true"
到该布局的 XML,按钮将很好地淡入和淡出,并且布局将拉伸和收缩。您可能需要更改您的订单B
或C
VISIBLE
使其GONE
看起来正确,具体取决于您正在做什么
哦,另外,这也取决于你的布局——它需要layout_width = "wrap_content"
这样它才能收缩以包裹剩余的A
. 如果您使用GridLayout
具有固定大小的 a,则需要在代码中更改该宽度,或使用 aLinearLayout
或复制其外观ConstraintLayout
。这取决于你实际在做什么!
推荐阅读
- javascript - 使用 Google 地球引擎从 Javascript 中的字典中提取数字
- compression - 如果你丢失了 ZST 存档的训练字典,你还能解压它吗?
- angular - Angular Cdk 拖放,等长列表
- javascript - 检查给定的整数数组是否包含两次特定数字
- nginx - nginx服务器多位置反向代理
- python - 来自多个路径的内容的 zipfile 列表
- networking - 如何过滤 tcpdump 以获取网站的直接主机名?
- python - 计算二维 Numpy 数组的加权和
- c++ - 使用正确的强制转换用 std::array of double 的元素填充 int 的 std::array 的最简单方法是什么?
- php - 当我用 spatie 包处理 stripewebook 时什么也没有发生