Приложение не подходит для всех размеров дисплея - PullRequest
1 голос
/ 26 января 2011

Я создаю приложение для Android, и оно разработано для Galaxy Tab, по спецификации, размер экрана 1024x600, но если я пытаюсь добавить свой компонент в этом размере, левый и нижний обрезаются.

Я добавил следующий код, чтобы увидеть разницу

  WindowManager mWMgr = (WindowManager) getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE);
  int width = mWMgr.getDefaultDisplay().getWidth();
  int height = mWMgr.getDefaultDisplay().getHeight();
  Toast.makeText(getApplicationContext(),
    "[system][w=" + width + ":h=" + height + "]", Toast.LENGTH_LONG).show();

  width = getWindowManager().getDefaultDisplay().getWidth();
  height = getWindowManager().getDefaultDisplay().getHeight();
  Toast.makeText(getApplicationContext(),
    "[this][w=" + width + ":h=" + height + "]", Toast.LENGTH_LONG).show();

При запуске это показывает: [Система] [ш = 600: ч = 1024] [Это] [ш = 400: ч = 683]

Почему это происходит?

При необходимости я добавляю свой код для вывода компонентов на экран.

Это мой layout.xml

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

В этом случае изображение, которое я рисую в ImageView, масштабируется до размера экрана (400x683)

Я проверял с:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="600px"
    android:layout_height="1024px">
    <ImageView android:id="@+id/image01" android:layout_width="match_parent"
        android:layout_height="match_parent" android:scaleType="fitXY" />
</LinearLayout>

И, таким образом, левая и нижняя часть изображения обрезаются на экране.

Ответы [ 3 ]

2 голосов
/ 26 января 2011

Не используйте Display.getWidth / Height ().Они возвращают raw размер дисплея.Это не так много места у вас на самом деле.Например, строка состояния уменьшит фактическое пространство, которое у вас есть, на некоторое неопределенное количество вдоль некоторой оси.И не думайте, что использование FLAG_FULLSCREEN избавит вас от этого, потому что для устройства вполне разумно иметь «строку состояния», содержащую такие вещи, как кнопки «назад» и «домой», и, следовательно, не то, от чего вы можете избавиться.*

Правильный способ изменения размера экрана - через систему просмотра.Самая простая вещь здесь - просто создать подкласс View, который реализует onSizeChanged (), и вставить это в setContentView ().Как только этап макета завершится, ваш onSizeChanged () будет вызван с пространством, доступным для представления.Он будет вызываться всякий раз, когда изменяется это пространство - из-за изменения ориентации, изменения отображения, отображения IME и т. Д.

1 голос
/ 26 января 2011

Что у вас есть в вашем XML? Заполнить родительский или обернуть содержимое для представления? вам нужен первый, в зависимости от того, что вы делаете ...

Редактировать: сверху Торстен Диттмарс ответит ...

1 голос
/ 26 января 2011

Помогает ли указать соответствующее значение в манифесте:

<supports-screens android:smallScreens=["true" | "false"] 
                  android:normalScreens=["true" | "false"] 
                  android:largeScreens=["true" | "false"] 
                  android:anyDensity=["true" | "false"] />

См. Документы по Android на этом .

...