我有一个包含两个ImageViews的布局。我希望其中一个在人像中可见,而另一个在风景中可见。如何使用资源实现它? (我知道如何通过编程方式对其进行设置,但是我需要使用资源来实现此特定用途)。

我尝试了类似的东西

在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位图的应用程序小部件的自动土地/纵向切换有关)。

最佳答案

当您使用此技巧时,将可见性行添加到样式中并将该文件的两个实例置于-land和normal模式,这将是可能的。

我的意思是在styles.xml文件夹中的values文件中放置一个名称为s1的样式,然后在其中放置android:visibility=visible,在styles.xml文件夹中的values-land中放置一个名称为s1的样式,并将android:visibility=gone放置。

同样,在styles.xml文件夹中的values文件中放置一个名为s2的样式,然后在其中放置android:visibility=gone,在styles.xml文件夹中的values-land中放置一个名称为s2的样式,然后在android:visibility=visible中放置。

然后,将s1设置为第一个imageview,将s2设置为第二个imageview。

亲爱的卡尔文(Calvin)给出的解决方案也是正确的,但是当您的复杂布局可能会随时间变化时,使用一个布局文件会更好,并且更改的需求会更少。

09-10 10:16
查看更多