我有两个layout-hdpi & layout-mdpi的相同活动。 现在我有一个按钮,在这两个布局中,点击此按钮,我必须打开另一个活动,为hdpi设备& mdpi设备的另一个相对布局。根据屏幕大小区分源文件(.java)?
所以, 我要做出不同的文件夹中的源文件,以支持多个屏幕尺寸就像布局,华电国际,布局MDPI ....
我有两个layout-hdpi & layout-mdpi的相同活动。 现在我有一个按钮,在这两个布局中,点击此按钮,我必须打开另一个活动,为hdpi设备& mdpi设备的另一个相对布局。根据屏幕大小区分源文件(.java)?
所以, 我要做出不同的文件夹中的源文件,以支持多个屏幕尺寸就像布局,华电国际,布局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
}
我应该如何实现这个切换不同的活动。 –
同样的方法也可以应用于活动..唯一的是你的主要活动将是一个..这将是一个发射器活动和控制器以及.. – bakriOnFire
这听起来像你可能想表明使用的东西d由布局本身来确定要启用哪个行为。假设您在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将火华电国际的情况下,这将xxhdpi
这是违背MVC模块,默认情况下,随后的Android。为了定义一个控制器,你应该只在单个java文件中为每个活动工作。
我相信你无法做到这一点。您需要使用swtch case来识别密度dpi,然后进行相应的编码。 –
为什么,你想达到什么目的? – npace
检查编辑的答案。 –