【问题标题】:How to set the drawable to for android app for multiple resolution?如何为Android应用程序设置drawable以实现多种分辨率?
【发布时间】:2012-06-18 23:09:44
【问题描述】:

我正在开发具有大量图像的 android 应用程序。这是一个韩国应用程序。 我想支持尽可能多的分辨率。 所以我创建了 4 个不同的文件夹(ldpi、mdpi、hdpi、xhdpi)用于可绘制,正如谷歌文档所述。 现在我的问题是我的应用程序可以在几乎所有设备上完美运行,但在韩国有设备 Pantech Vega LTE M 这给了很多麻烦

它的分辨率属于 xhdpi 类别,但我的应用仍然在此设备中显示来自 mdpi 的图像,并且它显示的图像比它的分辨率大。所以一半的图像被压缩显示。

所以我不知道如何为此设备设置可绘制对象。我是否需要添加单独的可绘制文件夹以匹配此分辨率。

如果我更改 mdpi 文件夹中的图像,那么它会为其他分辨率带来问题。

除了我需要添加多少文件夹之外,我的应用还可以兼容所有可能的分辨率。

【问题讨论】:

    标签: android drawable


    【解决方案1】:

    那是因为该设备运行的是 Android 2.3 Gingerbread,其中 X-Large 配置尚不支持,因为从 Adroid 3.0 afaik 开始支持该分辨率。

    编辑: 看起来 xhdpi 是从 API 级别 9 开始支持的,并且您设备的配置规范看起来就像带有 xhdpi 的普通大屏幕。因此,我能想到的唯一解决方法是在您的可绘制对象中创建这些文件夹。

    【讨论】:

    • 设备的规格似乎运行 2.3 倍,即使它升级到 ICS,我建议您检查下面提到的设备密度,因为到目前为止这似乎是自定义 ROM 上的一个错误用于该设备。
    【解决方案2】:

    您好,您创建了 drawable-large-mdpi 等可绘制文件夹

    1. 检查您的设备属于 large 、 xlarge 类别并相应地创建文件夹。
    2. 发布您的屏幕分辨率以调查问题。
    3. 检查此代码以获取有关您设备的确切信息

      DisplayMetrics metrics = new DisplayMetrics(); 
      getWindowManager().getDefaultDisplay().getMetrics(metrics); 
      
      switch(metrics.densityDpi)
      {      
      
          case DisplayMetrics.DENSITY_LOW:                 
          Toast.makeText(this,"low density " + String.valueOf(metrics.densityDpi),Toast.LENGTH_SHORT ).show();
          break;      
          case DisplayMetrics.DENSITY_MEDIUM:                  
          Toast.makeText(this,"medium density " + String.valueOf(metrics.densityDpi),Toast.LENGTH_SHORT ).show(); 
          break;      
          case DisplayMetrics.DENSITY_HIGH:
          Toast.makeText(this,"high density " + String.valueOf(metrics.densityDpi),Toast.LENGTH_SHORT ).show();           
          break; 
      }
      
      
      if ((getResources().getConfiguration().screenLayout &  Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) 
      {              Toast.makeText(this, "Large screen",Toast.LENGTH_SHORT).show();      }    
      else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) 
      {              Toast.makeText(this, "Normal sized screen" , Toast.LENGTH_SHORT).show();      }      
      else if ((getResources().getConfiguration().screenLayout &      Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) 
      {              Toast.makeText(this, "Small sized screen" , Toast.LENGTH_SHORT).show();     }     
      else {         Toast.makeText(this, "Screen size is neither large, normal or small" , Toast.LENGTH_LONG).show();     } 
      

    【讨论】:

    • 感谢 vinnet 我会试试看设备设备配置文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多