我开发了一个应用程序。适用于大屏幕平板电脑和中屏移动设备。
但是在Micromax Canvas系列中,它需要重新定位为平板电脑,因为这些类型的设备具有大分辨率。
我的设备屏幕约为 4 英寸,但是当我在我的设备上运行代码时,它会认为大小为 5.81 英寸。可能是因为高分辨率?
谁能说出解决方案?
我检查屏幕尺寸的代码是。
int orientation = getWindowManager().getDefaultDisplay().getOrientation();
screen_size = global.getScreenSize();
Toast.makeText(getApplicationContext(), "Screen Size:" +screen_size, 500).show();
if(screen_size>=5.1)
{
if (orientation==0)
setContentView(R.layout.login_large);
else if (orientation==1)
setContentView(R.layout.login_large_land);
else if (orientation==2)
setContentView(R.layout.login_large);
else if (orientation==3)
setContentView(R.layout.login_large_land);
}
当我运行该应用程序时,它可以在平板电脑和三星设备中成功运行,但它不能在Micromax Canvas系列上运行。
我的全局变量编码是
public double getScreenSize()
{
double size = 0;
try
{
DisplayMetrics dm = getApplicationContext().getResources().getDisplayMetrics();
float screenWidth = dm.widthPixels / dm.xdpi;
float screenHeight = dm.heightPixels / dm.ydpi;
size = Math.sqrt(Math.pow(screenWidth, 2) + Math.pow(screenHeight, 2));
}
catch(Throwable t){}
return size;
}
我认为您可以在这里做几件事,既可以提高代码质量,又可以解决您看到的问题:
- 不应检测 XML 文件中的方向和负载,而应将相同的 XML 文件放在不同的文件夹中 (
layout/layout-land
) - 通读此处的文档,您可能会决定使用
sw600dp
而不是"大"
在Coding Way
中执行此操作是一种不好的做法,因为某些设备不会返回确切的物理屏幕尺寸,但这是您解决问题的方法
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
double x = Math.pow(dm.widthPixels/dm.xdpi,2);
double y = Math.pow(dm.heightPixels/dm.ydpi,2);
screen_size = Math.sqrt(x+y);
Log.d("debug","Screen inches : " + screen_size);
然后你可以做你想做的事
if(screen_size>=5.1)
{
if (orientation==0)
setContentView(R.layout.login_large);
else if (orientation==1)
setContentView(R.layout.login_large_land);
else if (orientation==2)
setContentView(R.layout.login_large);
else if (orientation==3)
setContentView(R.layout.login_large_land);
}