根据屏幕大小区分源文件(.java)?

时间:2013-10-22 12:39:14

标签: android android-screen-support

我在layout-hdpi&中有两个布局。 layout-mdpi相同的活动。 现在我有一个按钮,在这两个布局中,在这个按钮上点击我必须打开hdpi设备的另一个活动& mdpi设备的另一种相对布局。

所以, 我想为源文件制作不同的文件夹以支持多种屏幕大小就像layout-hdpi,layout-mdpi ....

3 个答案:

答案 0 :(得分:1)

我认为不同的文件夹你指的是不同的包

您可以创建控制器类并以编程方式确定屏幕密度,您可以决定调用密度(屏幕类别)特定的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
}

答案 1 :(得分:1)

听起来您可能想要使用布局本身指示的内容来确定要调用的行为。假设您在hdpi文件夹的布局中有一个标识为R.id.only_in_hdpi的视图,并且该标识不存在于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

也是如此

答案 2 :(得分:0)

这是针对MVC模块的,默认情况下是Android。对于定义控制器,您应该只在每个活动的单个java文件中工作。