Подтвердить что ты не робот

Программный код ресурса изменения Android

Возможно ли программно изменить квалификатор конфигурации ресурсов? Я имею в виду, чтобы система для некоторых устройств hdpi использовала ресурсы из папки xhdpi вместо hdpi.

4b9b3361

Ответ 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().