【问题标题】:Android set View visibility programmatically based on screen sizeAndroid根据屏幕大小以编程方式设置视图可见性
【发布时间】:2013-05-01 15:50:59
【问题描述】:

我在我的 Android 应用中有一个视图,我想在较小屏幕上的 visible/gone 和较大屏幕上的 visible/invisible 之间切换。初始设置(gone 用于小屏幕,invisible 用于大屏幕)是通过在layoutlayout-sw600dp-land 下拥有两个单独的 XML 布局文件来完成的,但是当我需要动态交换可见性设置时,如何我从 Java 代码中根据屏幕大小确定选择哪一个?

编辑:更具体地说,我想在我的代码中检测导致 Android 使用来自layout-sw600dp-land 的布局的相同条件。我什至在考虑将值记录在 values-sw600dp-land 目录中的某处,但不确定将其放入哪个文件以及如何访问它。

【问题讨论】:

  • 只是出于好奇,为什么需要动态执行此操作?
  • 我需要根据一些计算结果和用户输入来切换视图的可见性。当“不可见”状态在大屏幕横向布局中为 invisible 而在所有其他状态下为 gone 时,它的效果最佳。
  • 我明白了。我打算建议使用 tag 属性,但我看到 ChrisCM 链接的问题中的一个答案已经涵盖了这一点。

标签: android android-layout


【解决方案1】:

您可以使用以下方法获取以像素为单位的屏幕大小。

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels; 
int height = dm.heightPixels; 

但是,关于屏幕尺寸是指像素还是英寸,您的问题是模棱两可的。您可能需要利用 dm.densityDpi 值,将值从像素转换为英寸,以便更有用地计算屏幕的“大小”。

编辑的答案:

有两种可能的解决方案。这个线程中引用了一个,非常简单,您在上面提到了它。

How to programatically determine which XML layout my Android apps is using?

第二个不是解决方案,而是解释。 layout-sw600dp-land 文件替换了 3.2 之前的旧命名约定,类似于 layout-xlarge-land。这基本上是“横向”模式下的“xlarge”屏幕。因此,您可以通过查找 xlarge 屏幕尺寸(其中宽度 > 高度)以编程方式检测到这一点。下面是比较旧约定与新“sw600dp”= 最小宽度为 600 dp 约定的一个很好的参考。

http://developer.android.com/training/multiscreen/screensizes.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2015-09-12
    • 2016-08-31
    • 1970-01-01
    • 2014-05-18
    相关资源
    最近更新 更多