我在同一活动的 layout-hdpi 和 layout-mdpi 中有两个布局。现在我在两个布局中都有一个按钮,在这个按钮上单击我必须为 hdpi 设备打开另一个活动和 mdpi 设备的另一个相关布局。
所以,我想为源文件创建不同的文件夹以支持多种屏幕尺寸就像 layout-hdpi,layout-mdpi ....
我在同一活动的 layout-hdpi 和 layout-mdpi 中有两个布局。现在我在两个布局中都有一个按钮,在这个按钮上单击我必须为 hdpi 设备打开另一个活动和 mdpi 设备的另一个相关布局。
所以,我想为源文件创建不同的文件夹以支持多种屏幕尺寸就像 layout-hdpi,layout-mdpi ....
我认为不同的文件夹意味着不同的包
您可以创建一个控制器类并以编程方式确定屏幕密度,您可以在其中决定调用密度(屏幕类别)特定的 java 类。
//Determine density and call the specific class as you want
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int density = metrics.densityDpi;
if (density==DisplayMetrics.DENSITY_HIGH) {
//call package1 classes for High Density devices
}
else if (density==DisplayMetrics.DENSITY_MEDIUM) {
//call package2 classes for Medium Density devices
}
else if (density==DisplayMetrics.DENSITY_LOW) {
//call package3 classes for Low Density devices
}
else {
//call package4 classes for rest
}
听起来您可能想使用布局本身指示的东西来确定要调用的行为。假设您在 hdpi 文件夹的布局中有一个带有 id 的视图R.id.only_in_hdpi
,并且该 id 不存在于 mdpi 文件夹中。以下是您解决问题的方法:
View v = findViewById(R.id.only_in_hdpi);
if (v != null) {
// do whatever you need to if it's hdpi
} else {
// handle the non-hdpi case
}
重要的是要注意 xhdpi 将触发 hdpi 案例,xxhdpi 也会触发
这与默认情况下跟随 Android 的 MVC 模块相反。要定义控制器,您应该只为每个活动在单个 java 文件中工作。