Android: несоответствие между интерфейсом эмулятора и интерфейсом устройства - PullRequest
2 голосов
/ 25 декабря 2011

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

Вот соответствующийcode.

У меня есть xml-файл, который определяет фигуру - простой синий прямоугольник:

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <corners
        android:radius="4dp" />
    <gradient
        android:angle="270"
        android:startColor="#449def"
        android:endColor="#2f6699" />
    <stroke
        android:width="1dp"
        android:color="#2f6699" />
</shape>

Затем у меня есть другой xml-файл "view", который использует эту форму, как показано здесь:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

     <View
         android:background="@drawable/blue_rectangle"
         android:layout_width="match_parent"
         android:layout_height="match_parent" 
     />

</LinearLayout>

Наконец, у меня есть пользовательская ViewGroup, которая расширяет RelativeLayout.Этот пользовательский макет имеет дочерний объект вида, который я описал выше.Пользовательский макет также переопределяет метод onLayout, так что он обрабатывает сам процесс макета.Этот код находится здесь:

@Override
protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) 
{   
    //Layout the children of this viewgroup
    int childCount = this.getChildCount();
    for (int i = 0; i < childCount; i++)
    {
        NodeView view = (NodeView) this.getChildAt(i);
        view.layout(40, 40, 40, 40); //Hard code the child object position
    }
}

Как вы можете видеть, я жестко кодирую дочерние представления, чтобы иметь положение (40, 40) и иметь ширину и высоту 40 dip.

К сожалению,Я получаю разные результаты.Вот как это выглядит на эмуляторе Android (часть инструментов разработки Android):

Android emulator output

Вот как это выглядит на моем реальном устройстве Android (и это то, чтоЯ тоже хочу, чтобы это выглядело):

Android device output

Что вызывает несоответствие размеров синей рамки?Есть идеи?Спасибо!

1 Ответ

3 голосов
/ 25 декабря 2011

Эмулятор имеет настройку, когда вы настраиваете AVD под названием Abstracted LCD DensityУбедитесь, что установлено то же самое, что и устройство.Посмотрите, работает ли это.

...