我有一个包含两个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)给出的解决方案也是正确的,但是当您的复杂布局可能会随时间变化时,使用一个布局文件会更好,并且更改的需求会更少。