управление раскладкой в ​​андроиде - PullRequest
4 голосов
/ 21 марта 2012

На самом деле я создал приложение для всех разрешений экрана. Поэтому для этого, согласно документации, я создал список каталогов ресурсов в приложении, которое предоставляет разные дизайны макетов для разных размеров экрана и разные растровые рисунки для экранов средней, высокой и очень высокой плотности.

Например:

res/layout-normal/my_layout.xml // макет для нормального размера экрана («по умолчанию»)

res/layout-small/my_layout.xml // макет для небольшого размера экрана

res/layout-large/my_layout.xml // макет для большого экрана

res/layout-xlarge/my_layout.xml // макет для очень большого экрана

Теперь, когда я запускаю свое приложение на другом устройстве, я замечаю, что некоторые устройства с другим разрешением экрана берут макет из одних и тех же каталогов ресурсов, т.е. layout-normal, и примеры таких устройств:

HVGA (320 x 480)

WQVGA 400 (240 x 400)

WVGA (480 х 800)

WXGA (720 x 1280)

Из-за использования макета из тех же каталогов ресурсов, т.е. layout-normal, мне очень трудно управлять пространством между пользовательским интерфейсом для всех устройств, так как они имеют одинаковую компоновку. Потому что, если я управляю макетом для HVGA, то он не выглядит хорошо с другой стороны, из-за разрешения.

Так есть ли способ решить эту проблему. Пожалуйста, помогите мне решить эту проблему.

Ответы [ 3 ]

0 голосов
/ 21 марта 2012

Не готовить XML для каждого макета.просто создайте изображения для всех (ldp, mdpi, hdpi) с тем же именем и поместите в эту другую папку в соответствии с размером.

ldpi : 240X320
mdpi : 320X480
hdpi : 480X800

И дайте разрешение в файле Android Android Manifest.1006 * Я применяю этот способ, чтобы универсальное приложение в android.it работало нормально, попробуйте вот так ...

0 голосов
/ 20 июля 2012

@ hasMukh указал верное направление, но если вы хотите, чтобы макеты для этих 4 устройств были более точными.Я предлагаю вам использовать формат "layout-плотность-разрешение" для именования папок макета.Например,

для папки макета HVGA (320x480) должно быть «layout-hdpi-480x320» для папки макета WQVGA (240x400) должно быть «layout-ldpi-400x240» для WVGA (480x800) папка макета должнабыть "layout-mdpi-800x480" для папки макета WXGA (720x1280) должно быть "layout-mdpi-1280x720"

Этот метод хорош, только если вы планируете ориентироваться на определенные несколько устройств ... и вы можете сохранитьтолько одна папка drawabale и используйте значения dp для макетов.

0 голосов
/ 21 марта 2012

У меня та же проблема, я использовал другой подход. получить высоту / ширину устройства:

DisplayMetrics displayMetrics = new DisplayMetrics();
    WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); // the results will be higher than using the activity context object or the getWindowManager() shortcut
    wm.getDefaultDisplay().getMetrics(displayMetrics);
    screenWidth = displayMetrics.widthPixels;
    screenHeight = displayMetrics.heightPixels;

и проверьте высоту / ширину устройства в соответствии с тем, что я использовал макет как

if(screenWidth == 320 || screenHeight== 480){
        setContentView(R.layout.test_320_480);
    }else if(screenWidth == 240 || screenHeight == 320){
        setContentView(R.layout.test_240_320);
    }else if(screenWidth == 480 || screenHeight == 800 || screenHeight == 854){
        setContentView(R.layout.test_480_800);
    }

используйте один и тот же идентификатор для каждого элемента управления в макете для того же экрана. Я поместил весь макет в папку макета, и это работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...