Программный код ресурса изменения Android
Возможно ли программно изменить квалификатор конфигурации ресурсов?
Я имею в виду, чтобы система для некоторых устройств hdpi использовала ресурсы из папки xhdpi вместо hdpi.
Ответы
Ответ 1
В моем проекте у меня есть ldpi, mdpi, hdpi и xhdpi ресурсов изображения. Для системы Kindle fire (1024 x 600 - 169 точек на дюйм) для Android берет ресурсы из папки mdpi, и приложение выглядит очень плохо. я хотите, чтобы андроид взял ресурсы из папки hdpi.
В связи с вашим комментарием я обычно предоставляю ресурсы только для экрана hdpi, и все остальные плотности работают нормально. Тестирование на устройствах 2.1+ или 2.2+, на которые я обычно нацеливаюсь!
Я понимаю риск, который не документирован, поэтому он не должен работать, хотя он и делает! Таким образом, я избегаю некоторого KB из моего последнего apk.
Но я не предлагаю использовать xhdpi вместо hdpi, поскольку xhdpi работает только в устройствах 3+ или что-то вроде этого.
Просто для тестирования различных плотностей на одном устройстве вы можете изменить AVD:
am display-density 480
Дополнительную информацию см. в документе android doc: http://developer.android.com/tools/help/adb.html#shellcommands
Ответ 2
Я не уверен, что сможешь. Не поймите меня неправильно: я лично хотел бы знать ответ на этот вопрос. Что именно вы хотели бы сделать?
Если вы собираетесь делать что-то программно в любом случае, возможно, лучше разместить актив в прямом режиме, а затем применить масштабирование. Вы можете легко получить множитель плотности
Ответ 3
Kindle имеет большой экран, но со средней плотностью
Он принимает макет из res/layout-large/your.xml
Но изображения с res/drawable/mdpi, поэтому просто создайте папку с именем res/drawable/mdpi-large
надеюсь, что это сработает для вас, но изображения должны соответствовать разрешению
Ответ 4
Попробуйте этот код. Надеюсь, поможет.
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().
Ответ 5
Вы также можете настроить ресурсы для ширины и других свойств устройств. Прочитайте это: http://developer.android.com/guide/practices/screens_support.html