макет выглядит хорошо в редакторе макетов Android - полностью отключен на эмулируемых устройствах - PullRequest
0 голосов
/ 30 марта 2012

Например: я сделаю макет (используя редактор) для вкладки galaxy.Когда я запускаю эмулятор вкладок galaxy, мои круги будут разбросаны по всему «экрану».Если я создаю макет для телефона меньшего размера, а затем запускаю эмулятор телефона, я получаю те же результаты - мои круги помещаются в другие места, чем я определил.Кажется, что редактор устанавливает мои круги так, как я хочу - относительно изображения, над которым они расположены.Однако устройства, кажется, помещают круги относительно размера экрана эмулируемого устройства.

Я пытался использовать viola_desmond_pic.getWidth () и viola_desmond_pic.getHeight (), чтобы я мог расположить кругипрограммно, но они просто возвращают размер экрана, а не вид.Я понимаю дп и планирование для разных плотностей, но расхождение редактора / эмулятора макета сумасшедшее.

  1. У кого-нибудь еще есть эта проблема несоответствия?Я вполне мог бы что-то пропустить.
  2. Как я могу получить точный размер Imageview, "viola_desmond_pic" и сделать мой макет из определенных ребер с процентами, если я решу пропустить XML?

Вот XML из моей папки "layout-xlarge".Я нацеливаюсь на Android 2.1

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout04"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageView
    android:id="@+id/viola_desmond_pic"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:contentDescription="@string/desc"
    android:scaleType="fitCenter"
    android:src="@drawable/viola_desmond" />

<ImageView
    android:id="@+id/keyhole"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="160dp"
    android:layout_marginTop="95dp"
    android:adjustViewBounds="true"
    android:contentDescription="@string/desc"
    android:scaleType="fitCenter"
    android:src="@drawable/circle3" />

<ImageView
    android:id="@+id/gun"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/keyhole"
    android:layout_alignRight="@+id/cat"
    android:layout_marginRight="42dp"
    android:adjustViewBounds="true"
    android:contentDescription="@string/desc"
    android:paddingBottom="35dp"
    android:paddingLeft="60dp"
    android:paddingRight="50dp"
    android:scaleType="fitCenter"
    android:src="@drawable/circle3" />

<ImageView
    android:id="@+id/popcorn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="61dp"
    android:layout_marginLeft="83dp"
    android:layout_toRightOf="@+id/keyhole"
    android:adjustViewBounds="true"
    android:contentDescription="@string/desc"
    android:paddingBottom="10dp"
    android:paddingLeft="15dp"
    android:paddingRight="15dp"
    android:paddingTop="20dp"
    android:scaleType="fitCenter"
    android:src="@drawable/circle3" />

<ImageView
    android:id="@+id/pen"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_marginRight="24dp"
    android:layout_marginTop="46dp"
    android:adjustViewBounds="true"
    android:contentDescription="@string/desc"
    android:paddingBottom="140dp"
    android:paddingTop="140dp"
    android:src="@drawable/circle3" />


</RelativeLayout>

1 Ответ

2 голосов
/ 30 марта 2012

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

В методе preDraw ViewTreeObserver вы можете попробовать использовать iv.getMeasuredHeight и getMeasuredWidth.Я стараюсь избегать этого и играю с макетами.Я совершенно уверен, что вы не можете указать проценты в Java для макета, однако вы можете определить желаемую высоту и ширину из доступного размера экрана и размера ваших изображений соответственно, используя RelativeLayout.LayoutParams и назначив параметры для вашего изображения.Таким образом, у вас есть очень ручное управление размером.

Надеюсь, это поможет.

Джейсон

...