android - 控制资源的 View 可见性

标签 android android-imageview android-view android-resources

我有一个包含两个 ImageView 的布局。我希望其中一个以纵向可见,另一个以横向可见。我如何使用资源来实现它? (我知道如何以编程方式设置它,但这个特定用途我需要使用资源来实现它)。

我尝试了类似的东西

在 res/layout/may_layout.xml:

...
<ImageView
      android:id="@+id/image1"
      android:visibility="@integer/visible_in_portrait"   <<-- is this allowed?
      ...
/>
<ImageView
      android:id="@+id/image2"
      android:visibility="@integer/visible_in_landscape"   
      ...
/>

在 res/values/integers.xml 中:

...
<!-- NOTE: 0 and 8 are VISIBLE and GONE respectively -->
<integer name="visibile_in_portrait">0</integer>
<integer name="visibile_in_landscape">8</integer>

在 res/values-land/integers.xml:

...
<integer name="visibile_in_portrait">8</integer>
<integer name="visibile_in_landscape">0</integer>

但我在尝试为图像充气时遇到运行时错误(索引超出范围)。当我删除 android:visibility 语句时,程序运行,但我看到两个图像。

问:如何使用资源作为 android:visibility 属性的值?

(如果您想知道为什么以编程方式设置它对我没有帮助,它与带有文件 uri 位图的应用小部件的自动陆地空间/纵向切换有关)。

最佳答案

这是一个已被接受的老问题,但以下解决方案可能对其他人有所帮助:

如果您检查 Android 源代码中的 res/values/attrs.xml,您会看到可见性属性的定义如下:

 <!-- Controls the initial visibility of the view.  -->
    <attr name="visibility">
        <!-- Visible on screen; the default value. -->
        <enum name="visible" value="0" />
        <!-- Not displayed, but taken into account during layout (space is left for it). -->
        <enum name="invisible" value="1" />
        <!-- Completely hidden, as if the view had not been added. -->
        <enum name="gone" value="2" />
    </attr>

此属性需要一个字符串值(可见、不可见、消失),将分别转换为 (0, 1, 2)。因此,您可以像这样声明包含这些值的整数资源:

值/整数.xml

<integer name="visible_in_portrait">2</integer> <!-- This is GONE -->

values-land/integers.xml

<integer name="visible_in_landscape">0</integer> <!-- This is VISIBLE -->

但是,如果您想让它变得更好,以便不再每次都猜测这些数字常量,您可以这样做:

值/整数.xml

<!-- These are alias for the constants we'll reference below -->
<integer name="view_visible">0</integer> <!-- This is VISIBLE -->
<integer name="view_invisible">1</integer> <!-- This is INVISIBLE -->
<integer name="view_gone">2</integer> <!-- This is GONE -->

<integer name="visible_in_portrait">@integer/view_gone</integer> <!-- We're referencing the visibility alias we declared above -->

values-land/integers.xml

<integer name="visible_in_landscape">@integer/view_visible</integer>

您可以使用这种方法或 Keyhan 建议的方法。选择更适合您的。

关于android - 控制资源的 View 可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9751881/

相关文章:

android - 找不到方法minifyEnabled()

Android AccountManager authToken 和 OAuth

android - 如何为 ImageView 赋予六边形形状

android - 如何在ImageView中设置图片?

android - 在android中为 View (Imagebutton)的X和Y坐标获取0值

android - 从非 UI 线程更新 View

android - 如何处理显然相互覆盖的gradle依赖项

java - Android checkbox.isChecked() 不能正常工作

android - 如何根据设备屏幕尺寸将百分比相对布局中的 ImageView 设置为以下比例,16 :9, 1 :1, 3 :2, 2 :1, 4:3

android - 以编程方式将 ABOVE 添加到 LayoutParams 会导致 View 高度为 0