是否可以以编程方式更改资源配置限定符?我的意思是,某些 hdpi 设备的系统从 xhdpi 文件夹而不是 hdpi 获取资源。
5 回答
在我的项目中,我有 ldpi、mdpi、hdpi 和 xhdpi 图像资源。对于 Kindle fire(1024 x 600 - 169 dpi) android 系统从 mdpi 文件夹中获取资源,应用程序看起来很糟糕。我想让 android 从 hdpi 文件夹中获取资源。
与您的评论相关,我通常只为 hdpi 屏幕提供资源,所有其他密度都可以正常工作。在我通常针对的 2.1+ 或 2.2+ 设备上进行测试!
我理解没有记录的风险,所以它不应该工作,尽管它可以工作!这样我就避免了我最终 apk 中的一些 KB。
但我不建议使用 xhdpi 代替 hdpi,因为 xhdpi 仅适用于 3+ 或其他设备。
只是为了在单个设备上测试不同的密度,您可以通过以下方式更改 AVD:
am display-density 480
有关更多信息,请参阅 android 文档:http: //developer.android.com/tools/help/adb.html#shellcommands
Kindle 屏幕大但密度中等
它从res/layout-large/your.xml 获取布局
但是来自res/drawable/mdpi的图像, 所以只需创建一个名为res/drawable/mdpi-large的文件夹
希望这对你有用,但图像必须符合 Kindle 的分辨率
试试这个代码。希望能帮助到你。
import android.util.DisplayMetrics;
private int result = 0; //Activity member
public void determineDeviceResolution {
switch(metrics.densityDpi)
{
case DisplayMetrics.DENSITY_LOW:
{
result = DisplayMetrics.DENSITY_LOW;
break;
}
case DisplayMetrics.DENSITY_MEDIUM:
{
result = DisplayMetrics.DENSITY_MEDIUM;
break;
}
case DisplayMetrics.DENSITY_HIGH:
{
result = DisplayMetrics.DENSITY_HIGH;
break;
}
default:
break;
}
}
private Drawable getDrawable(String icon) {
//Pass file name of the resource file
//while invoking this method for e.g. play_icon.png
//You can specify the folder from which resource
//needs to be picked for e.g. drawable_hd,drawable_xhdpi etc..
Drawable drawable = null;
if(result == DisplayMetrics.DENSITY_HIGH)
{
drawable=create_drawable("/drawable_hd/" + icon);
}
else
{
drawable=create_drawable("/drawable/" + icon);
}
return drawable;
}
Drawable create_drawable(String absolute_filepath)
{
InputStream in = null;
Bitmap bMap = null;
BufferedInputStream buf = null;
Drawable d = null;
try
{
in = getClass().getResourceAsStream(absolute_filepath);
buf = new BufferedInputStream(in);
bMap = BitmapFactory.decodeStream(buf);
if(in == null || buf == null || bMap== null)
{
return null;
}
if (in != null)
{
in.close();
}
if (buf != null)
{
buf.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
d = new BitmapDrawable(bMap);
return d;
}
最后,您可以将可绘制对象传递给 UI 元素的 setBackgroundDrawable() 方法。
我不确定你是否可以。不要误会我的意思:我个人也想知道这个问题的答案。你到底想做什么?
如果您无论如何都要以编程方式做事,最好将资产放入直接可绘制对象中,然后应用缩放。你可以很容易地得到密度乘数
您还可以为设备的宽度和其他属性自定义资源。阅读:http: //developer.android.com/guide/practices/screens_support.html