是否可以通过编程方式更改资源配置限定符? 我的意思是,为某些hdpi设备制作系统从xhdpi文件夹而不是hdpi获取资源。
答案 0 :(得分:1)
在我的项目中,我有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 doc:http://developer.android.com/tools/help/adb.html#shellcommands
答案 1 :(得分:0)
我不确定你是否可以。不要误会我的意思:我个人也想知道答案。你究竟想做什么?
如果你打算以编程方式做事,最好将资产放入直线绘图,然后应用缩放。你可以很容易地得到密度乘数
答案 2 :(得分:0)
Kindle有大屏幕,但中等密度
它采用 res / layout-large / your.xml
的布局但来自 res / drawable / mdpi 的图片只需创建一个名为 res / drawable / mdpi-large
的文件夹希望这对您有用,但图片必须符合kindle的分辨率
答案 3 :(得分:0)
试试这段代码。希望能帮助到你。
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;
}
最后,您可以将drawable传递给UI元素的setBackgroundDrawable()方法。
答案 4 :(得分:0)
您还可以自定义设备宽度和其他属性的资源。阅读:http://developer.android.com/guide/practices/screens_support.html