【问题标题】:Android - How to set visibility in xml depending on device?Android - 如何根据设备在 xml 中设置可见性?
【发布时间】:2017-08-25 23:31:02
【问题描述】:

我的活动中有一个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" -> 0

"gone" -> 8

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

或者有其他/更好的方法吗?

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

【问题讨论】:

  • 您为什么不想以编程方式进行操作?因为它非常简单。
  • 是的,我宁愿通过 XML 控制我的所有布局,并尽可能保持 Java 独立。

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


【解决方案1】:

您应该改用/values/integers/

values/integers.xml

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

values-sw720dp/integers.xml

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

然后这样调用:

android:visibility="@integer/my_textview_visibility"

【讨论】:

  • 只是为了完成,您不必使用/values/integers/strings.xml。你只需要定义一个integer 类型的android资源
  • 按照惯例,声明这些整数的最佳位置在哪里?
  • 我认为没有约定。一个好主意可能是拥有一个包含所有整数的 values/integers.xml 文件,类似于通常使用 values/strings.xml 完成的操作。
【解决方案2】:

ChrisStillwell 的回答是正确的。但根据 Android 文档,这些值不正确

【讨论】:

【解决方案3】:

正如您所说,最好的方法是为tablets 创建一个特定的layout,您的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>

然后,在“标准”值文件(如 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?

【讨论】:

  • 问题明确指出:NB - I do not want to show/hide the TextView programatically in my Java code.
猜你喜欢
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多