Android: AbsoluteLayout? - PullRequest
       2

Android: AbsoluteLayout?

6 голосов
/ 15 марта 2012

Я новичок в Android. Мне нравится иметь свободный выбор объектов рисования там, где я хочу. Так что я использовал Абсолютный макет. Я получаю сообщение о том, что нужно использовать другой макет. И я читал, что это из-за разного разрешения разных телефонов. Мой вопрос заключается в том, является ли это единственной причиной неиспользования Absolute Layout? Я сделал метод, который использует метрики для настройки пикселей.

public int widthRatio(double ratioIn){
    DisplayMetrics dm = new DisplayMetrics(); //gets screen properties
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    double screenWidth = dm.widthPixels;      //gets screen height
    double ratio = screenWidth/100;           //gets the ratio in terms of %
    int displayWidth = (int)(ratio*ratioIn);  //multiplies ratio desired % of screen 
    return displayWidth;
}

//method to get height or Ypos that is a one size fits all
public int heightRatio(double ratioIn){
    DisplayMetrics dm = new DisplayMetrics(); //gets screen properties
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    double screenHeight = dm.heightPixels;    //gets screen height
    double ratio = screenHeight/100;          //gets the ratio in terms of %
    int newHeight = (int)(ratio*ratioIn);     //multiplies ratio by desired % of screen
    return newHeight;
}

//sets size of any view (button, text, ...) to a one size fits all screens
public void setSizeByRatio(View object, int width, int height){
    LayoutParams params = object.getLayoutParams();
    params.width = widthRatio(width);
    params.height = heightRatio(height);
}

Так что если я скажу setSizeByRatio (Button, 10, 25); Он установит ширину кнопок на 10% ширины экрана и высоту на 25% процентов экрана.

Есть ли телефоны, на которых не работают Absolute Layouts? Этот макет вызывает другие проблемы?

Ответы [ 2 ]

6 голосов
/ 15 марта 2012

Причина, по которой AbsoluteLayout устарела, заключается в том, что у вас есть альтернативы в LinearLayout или GridLayout, которые делают то же самое и многое другое. Похоже, что вы пытаетесь рассчитать позиции на основе абсолютных позиций и количества пикселей, чего в общем случае следует избегать из-за проблем с размерами и плотностью экрана varoius.

Прочитайте ссылку, предоставленную @amiekuser, и сконцентрируйтесь на понимании того, как лучше всего работать. Некоторые советы позволяют создавать изображения для папок ldpi, mdpi и hdpi, используя единицу измерения для dpi (пикселей, не зависящих от плотности), а не для необработанных пикселей, и тестировать приложение на экранах разных размеров и плотности с помощью эмулятора.

Edit:

Чтобы установить x- и y-позицию представления, вы должны использовать LayoutParams. См. этот вопрос о том, как установить TopMargin и LeftMargin для представления с использованием LayoutParams.

3 голосов
/ 15 марта 2012

Телефоны на базе Android представлены во многих форм-факторах, т.е. не только сильно различаются по размеру экрана (2,7 ", 3,2", 3,7 "....), но и по разрешению (480X800, 480X848 и т. Д.). Сам Googleпредлагаем не использовать AbsoluteLayout. На самом деле его не рекомендуется использовать в более новых версиях API.

Ссылка ниже объясняет все это в деталях:

http://developer.android.com/guide/practices/screens_support.html

Проверьте лучшие практикираздел.

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