2012-06-26 4 views
0

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

У меня есть 3 разных макета для каждого типа игры (легкий, средний и жесткий), где у меня есть 4x4, 5x5 или 6x6 изображений на экране, которые необходимо сопоставить.

Я использую ImageAdapter, чтобы получить изображения и заполнить GridView, который я использую для отображения iamges на экране.

Вот файл XML для простой игры (4х4 изображения):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

    <RelativeLayout 
     android:id="@+id/mainBar" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:gravity="center"> 
     <TextView 
      android:id="@+id/player1" 
      android:layout_alignParentLeft="true" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Player1 - " 
      /> 

     <TextView 
      android:id="@+id/player1Score" 
      android:layout_toRightOf="@+id/player1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="00 " 
      /> 

      <TextView 
      android:id="@+id/player2Score" 
      android:layout_alignParentRight="true" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="00" 
      /> 

     <TextView 
      android:id="@+id/player2" 
      android:layout_toLeftOf="@+id/player2Score" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Player2 - " 
      /> 

    <Chronometer 
     android:id="@+id/time" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:text="02:00" /> 

    </RelativeLayout> 


    <GridView 
     android:id="@+id/gridview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentBottom="true" 
     android:layout_below="@id/mainBar" 
     android:gravity="center_vertical|center_horizontal" 
     android:numColumns="4"> 
</GridView> 



</RelativeLayout> 

Единственная проблема заключается в том, что, когда я бегу приложение на эмуляторе с небольшим размером экрана, что изображения выглядят натяжные. ... (см. IMG # 1) .., когда я действительно хотел бы выглядеть примерно так. (см. IMG # 2), на каждом экране независимо от размера!

IMG#1

IMG#2

Я использую различные ресурсы (различные изображения для ldpi, MDPI, ИПЧР).

+0

Я хотел бы предложить что делает ldpi изображения меньше, не менее детализированным. – Sam

+1

проверить ответ http://stackoverflow.com/questions/8428096/design-layout-for-multiple-screens и поместить изображения в соответствии с доступной папкой – rajpara

+0

Я разместил изображения в соответствии с папкой с возможностью вырезания, но это не сработает! – Alin

ответ

0

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

Для этого вы можете сделать отдельный макет для каждого размера телефона: маленький, обычный, большой и большой.

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

В этом случае вы хотели бы сделать один вертикальный линейный макет с четырьмя горизонтальными линейными макетами внутри.

+0

И как это решит мою проблему. Я не думаю, что изменение RelativeLayout, которое я использую с LinearLayout, изменило бы что-нибудь! – Alin

0

Используйте это, чтобы найти правильный физический размер экрана:

if ((getResources().getConfiguration().screenLayout & 
    Configuration.SCREENLAYOUT_SIZE_MASK) == 
     Configuration.SCREENLAYOUT_SIZE_LARGE) { 
    // on a large screen device ... 

} 

Источник: How to determine device screen size category (small, normal, large, xlarge) using code?

+0

Я действительно не понимаю, для чего хорош этот код? – Alin

+0

Определяет размер экрана, который вы используете? Это ваша проблема. –

Смежные вопросы