gpt4 book ai didi

android - 如何在没有代码的情况下隐藏 Android 布局 xml 中的部分可见 View ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:31 24 4
gpt4 key购买 nike

请在回答前完整阅读问题!

假设我有两种观点:

  1. first (黄色)在底部
  2. second (青色)填充上方 View 的其余部分 first

父 View 的大小是动态的。

当父级高度动态设置为第一列中的值时,如何实现下面的预期列 UI?请注意部分可见的 View 是如何隐藏而不是裁剪的。

What I want to achieve

约束

  • 任何代码都不可能,我知道可以通过以下方式解决问题: second.setVisibility(second.getHeight() < SECONDS_PREFERRED_SIZE? GONE : VISIBLE)但我无权访问 getHeight()所以解决方案必须是裸 xml。
    通过 RemoteViews 可以轻松编写仅编写 UI 状态的代码.
  • 基于上述不允许自定义 View 没有甚至,只有基本布局管理器 :
    FrameLayout , LinearLayout , RelativeLayout , GridLayout
    或者作为最后的手段之一:
    ViewFlipper , ListView , GridView , StackViewAdapterViewFlipper
  • layout_widthlayout_height动态的
    在示例中,我修复了它,因此很容易尝试不同的变体。上图是layout_height更改为模拟我想要处理的可能性的显示值。
  • 我用了TextView , 但它应该普遍适用于任何 View
  • 细心的人可能已经注意到,上面的解决方案限制为Home screen app widgets with RemoteViews 。 .

尝试

我尝试用 RelativeLayout 来实现和 LinearLayout , 但它们都表现为图片上的实际列。

相对布局

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="64dp" (actually fill_parent, but fix it for sake of simplicity)
android:layout_height="fill_parent" (first column on picture)
android:layout_gravity="center"
android:background="#666"
tools:ignore="HardcodedText,RtlHardcoded"
>
<TextView
android:id="@+id/first"
android:layout_width="wrap_content"
android:layout_height="16dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:background="#8ff0"
android:text="First"
/>
<TextView
android:id="@+id/second"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@id/first"
android:background="#80ff"
android:text="Second"
android:gravity="center"
/>
</RelativeLayout>

线性布局

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="64dp" (actually fill_parent, but fix it for sake of simplicity)
android:layout_height="fill_parent" (first column on picture)
android:layout_gravity="center"
android:background="#666"
android:orientation="vertical"
tools:ignore="HardcodedText,RtlHardcoded"
>
<TextView
android:id="@+id/second"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#80ff"
android:text="Second"
android:gravity="center"
/>
<TextView
android:id="@+id/first"
android:layout_width="wrap_content"
android:layout_height="16dp"
android:layout_gravity="right"
android:background="#8ff0"
android:text="First"
/>
</LinearLayout>

最佳答案

如果这是一个 RemoteViews/widget,请尝试使用多个布局文件。扩展AppWidgetProvider并覆盖 onAppWidgetOptionsChanged方法。在此函数中,您需要执行以下操作:

Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId);
int minHeight = options.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);

然后根据 minHeight 确定最适合膨胀的布局。 This page在制作小部件时非常有用。

关于android - 如何在没有代码的情况下隐藏 Android 布局 xml 中的部分可见 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26802517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com