Я очень разочарован. Я только что закончил свой проект на основе 360dp для "обычных экранов", но когда я попытался запустить в Motorola Atrix, у меня был сюрприз. Motorola Atrix - 360dp вместо 320dp, потому что его ширина составляет 540px. Теперь я ломаю голову, чтобы выяснить, что проблема должна быть решена. Как создать макет для 360dp?
Я пробовал все это:
main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#DFEFF1">
<Button
android:background="#AAAA11"
android:id="@+id/button1"
android:layout_width="@dimen/default_width"
android:layout_height="@dimen/default_height"
android:text="SOME TEXT 1"
/>
<Button
android:background="#FFAA11"
android:id="@+id/button2"
android:layout_width="@dimen/default_width"
android:layout_height="@dimen/default_height"
android:text="SOME TEXT 2"
android:layout_alignParentRight="true" />
</RelativeLayout>
RES/значения /strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="default_width">160dp</dimen>
<dimen name="default_height">160dp</dimen>
</resources>
Motorola Atrix
Samsung Galaxy SII
Как правило, при разработке макета вы хотите избежать планирования определенного размера пикселя. Если бы вы разделили все свои макеты на основе пикселей, как вы хотите, тогда вам придется почти предоставить один макет для каждого отдельного устройства (в мире так много устройств с экранами разного размера). Обычно вам нужно предоставить ресурсы макета для нескольких разных категорий. layout-small
, layout-normal
, layout-large
и т.д. Если вы предоставите те, и ваши макеты построены в хорошем манере, он должен хорошо масштабироваться для устройств различного размера.
Есть ли что-то конкретное, что не так с вашим макетом, когда вы запускаете его в устройстве большего размера? Возможно, если вы опубликуете, что я могу помочь вам попытаться решить проблему без необходимости разделить ваши макеты по размеру пикселей.
Поддержка нескольких экранов в документах разработчика содержит много отличной информации о том, как создавать приложения, чтобы они хорошо масштабировались.
РЕДАКТИРОВАТЬ:
Один из возможных способов решения вашей проблемы - не использовать статическое значение dp для ширины, а не позволять кнопкам расти, чтобы сколько угодно занимать пространство (по горизонтали), чтобы заполнить ширину экрана. Вы можете сделать это с помощью layout_weight и установить ширину для fill_parent
. У меня нет доступа к eclipse сейчас, поэтому я не могу проверить, но я уверен, что есть и способ получить этот эффект без linearlayout, но это был первый способ, о котором я думал.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#DFEFF1">
<LinearLayout
android:id="@+id/buttonRow"
android:orientation="horizontal"
android:layout_height="@dimen/default_height"
android:layout_width="fill_parent">
<Button
android:background="#AAAA11"
android:id="@+id/button1"
android:layout_width="0"
android:layout_height="@dimen/default_height"
android:text="SOME TEXT 1"
android:layout_weight="1"
/>
<Button
android:background="#FFAA11"
android:id="@+id/button2"
android:layout_width="0"
android:layout_height="@dimen/default_height"
android:text="SOME TEXT 2"
android:layout_weight="1" />
</LinearLayout>
</RelativeLayout>