我在我的Android应用中有一个视图,我希望在较小的屏幕上切换visible
/ gone
,而在较大尺寸的visible
/ invisible
之间切换。初始设置(gone
用于小型,invisible
用于大屏幕)是通过在layout
和layout-sw600dp-land
下设置两个单独的XML布局文件来完成的,但是当我需要时动态交换可见性设置,如何根据屏幕大小从Java代码中确定要选择哪一个?
编辑:更具体地说,我想在我的代码中检测到导致Android使用来自layout-sw600dp-land
的布局的相同条件。我想甚至在values-sw600dp-land
目录中的某处记录值,但不确定要将其放入哪个文件以及如何访问它。
答案 0 :(得分:4)
您可以使用以下内容获取屏幕的像素大小。
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
但是,您的问题是关于屏幕大小是指像素还是英寸的问题不明确。您可能需要利用dm.densityDpi值将值从像素转换为英寸,以便更有用地计算屏幕的“大小”。
ANSER FOR EDITS:
有两种可能的解决方案。一个在这个帖子中被引用,非常简单,你在上面提到它。
How to programatically determine which XML layout my Android apps is using?
第二个不是解决方案,而是解释。 layout-sw600dp-land文件替换了类似于layout-xlarge-land的旧命名约定3.2。这基本上是“风景”模式中的“xlarge”屏幕。因此,您可以通过查找xlarge屏幕大小以编程方式检测此信息,其中宽度>高度。下面是比较旧约定与新“sw600dp”=最小宽度为600 dp约定的良好参考。
http://developer.android.com/training/multiscreen/screensizes.html