为不同屏幕宽度提供布局的推荐方法是使用layout-swxxdp限定符将每个依赖于屏幕的布局包含在文件夹中:
res/layout-sw600dp/ # For 7” tablets (600dp wide and bigger)
res/layout-sw720dp/ # For 10” tablets (720dp wide and bigger)
res/layout-sw600dp-port/ # For 7” tablets in portrait (600dp wide or bigger)
res/layout-sw720dp-port/ # For 10” tablets in portrait (720dp wide or bigger)
Android会根据屏幕宽度自动为正确的布局充气。
Android可以找出要使用的布局,这很棒,但如果我的活动类中需要运行与屏幕大小相关的Java代码,该怎么办?以下方法的实现是什么样的?
// Returns true if the screen width is 600 dp or more
is600dp();
我见过像这样的方法
// Returns true if the screen is at least
// approximately 480x640 dp units
private boolean isLarge(){
return (this.getResources().getConfiguration().screenLayout
& Configuration.SCREENLAYOUT_SIZE_MASK)
>= Configuration.SCREENLAYOUT_SIZE_LARGE;
}
现在如果我的设备有600dp的屏幕宽度怎么办,但上面的方法返回false? Android会扩展正确的布局,但我的设备特定代码无法运行。
我甚至有意义吗?
答案 0 :(得分:2)
就像你可以在res/layout-sw600dp/
文件夹中放置布局一样,你可以将布尔值放在res/values-sw600dp/
文件夹中:
<resources>
<bool name="is600dp">true</bool>
</resources>
然后使用
在运行时引用它boolean is600dp = getResources().getBoolean(R.id.is600dp);
答案 1 :(得分:1)
您可以在单独的值文件夹中为该整数设置一个整数并使用不同的值。并从Java代码中获取运行时的整数值。
RES /值/ integers.xml
<integer name="layout_value">1</integer>
RES /值-sw600dp / integers.xml
<integer name="layout_value">2</integer>
或者,获取屏幕宽度并检查。
这为您提供了屏幕宽度(以像素为单位):
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int width = displayMetrics.widthPixels;
如果您只需要应用程序屏幕的宽度,在多窗口世界中,您应该使用:
Configuration configuration = yourActivity.getResources().getConfiguration();
int screenWidthDp = configuration.screenWidthDp; //The current width of the available screen space, in dp units, corresponding to screen width resource qualifier.
int smallestScreenWidthDp = configuration.smallestScreenWidthDp; //The smallest screen size an application will see in normal operation, corresponding to smallest screen width resource qualifier.