Android - 如何根据设备在xml中设置可见性?

时间:2017-03-31 15:59:03

标签: android xml android-layout android-view android-resources

我的活动中TextView通常为visible,但平板电脑设备为gone

我知道我可以为平板电脑创建一个新的布局文件,但这似乎有很多重复,所以我要做的是在我的(单个)布局文件中设置类似......

android:visibility="@string/my_textview_visibility"

...代表TextView。然后,在我的字符串资源文件中,设置...

<string name="my_textview_visibility">gone</string>(在 values / strings.xml 中)

...和...

<string name="my_textview_visibility">visible</string>(在 values-sw720dp / strings.xml 中)

...隐藏平板电脑的TextView。

然而,当我尝试这个时,应用程序在尝试显示该活动时崩溃。

我是否需要使用常量值而不是上述字符串值 - 例如,

"visible" - &gt; 0

"gone" - &gt; 8

..如果是这样,在XML文件中添加/引用这些值的正确方法是什么?

还是有其他/更好的方法吗?

注意 - 我不想在我的Java代码中以编程方式显示/隐藏TextView

3 个答案:

答案 0 :(得分:3)

您应该使用/values/integers/代替:

<强>值/ integers.xml

<integer name="my_textview_visibility">0</integer> <!-- 0 = View.VISIBLE -->

<强>值-sw720dp / integers.xml

<integer name="my_textview_visibility">2</integer> <!-- 2 = View.GONE -->

然后这样调用:

android:visibility="@integer/my_textview_visibility"

答案 1 :(得分:3)

ChrisStillwell的回答是正确的。但根据Android文档

,这些值是不正确的

enter image description here

答案 2 :(得分:0)

正如您所说,执行此操作的最佳方法是为layout创建一个特定的tablets,其中TextView将被隐藏。但是,可以使用xml boolean resources :(作为res/values-sw600dp/):

执行此操作
<resources>
    <bool name="isTablet">true</bool>
</resources>

因为sw600dp限定符仅对android 3.2以上的平台有效。如果您想确保此技术适用于所有平台(3.2之前),请在res/values-xlarge文件夹中创建相同的文件:

<resources>
    <bool name="isTablet">true</bool>
</resources>

然后,在&#34;标准&#34;值文件(如res/values/),您将布尔值设置为false:

<resources>
    <bool name="isTablet">false</bool>
</resources>

然后在您的活动中,您可以获取此值并检查您是否在平板电脑尺寸设备中运行:

boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
if (tabletSize) {
    // do something
} else {
    // do something else
}

字体:Determine if the device is a smartphone or tablet?