在android xml:ish
中有没有办法直接根据xml中的布局大小/方向更改可见性属性?
我在片段中有一个按钮,只有小屏幕尺寸才能看到。在更大的尺寸上,让我们说布局大,我希望它被隐藏。
当然,我可以毫无问题地为此编写代码,但出于学术原因,我想知道它可以做这样的事情。
<Button
android:id="@+id/btn_check_availability"
style="@style/product_info_footer_button"
android:layout_width="fill_parent"
android:layout_height="35dp"
android:text="@string/check_availability"
android:visibility="<magic expression here>" />
由于
// Johan
答案 0 :(得分:6)
此答案基于provided here by Flávio Faria的解释。
visible
,gone
等可以将值映射到字符串资源中的相应枚举值 - 这意味着您可以创建visibilty.xml
您想要的每个布局的字符串资源,Android将自动为每种屏幕类型解析您想要的那个。
我建议如下:
/res/values/visibilty.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Enum values pulled from Android source -->
<string name="visibility_visible">0</string>
<string name="visibility_invisible">1</string>
<string name="visibility_gone">2</string>
<string name="product_info_footer_button_visibility">@string/visibility_visible</string>
</resources>
/res/values-large/visibilty.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="product_info_footer_button_visibility">@string/visibility_invisible</string>
</resources>
然后您可以按如下方式引用按钮的可见性:
<Button
android:id="@+id/btn_check_availability"
style="@style/product_info_footer_button"
android:layout_width="fill_parent"
android:layout_height="35dp"
android:text="@string/check_availability"
android:visibility="@string/product_info_footer_button_visibility" />
警告:这取决于具有与AOSP源中定义的可见性(0/1/2)相同的枚举值的设备。设备制造商和自定义ROM创建者可以更改这些值,在这种情况下,此代码可能无法按预期工作。
答案 1 :(得分:2)
android:visibility属性是一个int(与许多属性一样),因此您可以执行以下操作:
在values-port和values-land资源目录中定义名为visibility.xml的资源文件。该文件的内容如下:
值端口/ visibility.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="buttonvisibility">0</integer> <!-- 0 is the value for android:visible -->
</resources>
值-脊/ visibility.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="buttonvisibility">1</integer> <!-- 1 is the value for android:invisible -->
</resources>
并在layout.xml中:
<Button
android:id="@+id/btn_check_availability"
style="@style/product_info_footer_button"
android:layout_width="fill_parent"
android:layout_height="35dp"
android:text="@string/check_availability"
android:visibility="@integer/buttonvisibility" />
它的工作原理:btn_check_availability在纵向中可见,在横向中不可见。
注意:此示例使用布局方向作为鉴别器,但您当然可以使用任何资源限定符(如维度,密度等)来执行此操作
答案 2 :(得分:1)
XML中没有可用的魔术表达式。如果只是。
这个问题有两种方法:
a /使用drawable文件夹系统。可以复制和命名可绘制文件夹,使其符合此处规定的约定:Supporting Multiple Screens。
b /以编程方式执行。在运行时检查屏幕DPI并相应地显示/隐藏视图。
答案 3 :(得分:0)
您是否考虑过在适当的尺寸/方向布局文件夹中使用包含和多种布局?某些布局可能根本没有按钮或默认隐藏它。