如何在安多里德中开发中屏幕和大分辨率的应用程序



我开发了一个应用程序。适用于大屏幕平板电脑和中屏移动设备。

但是在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;
    }

我认为您可以在这里做几件事,既可以提高代码质量,又可以解决您看到的问题:

  1. 不应检测 XML 文件中的方向和负载,而应将相同的 XML 文件放在不同的文件夹中 ( layout/layout-land
  2. 通读此处的文档,您可能会决定使用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);
        } 

最新更新