Приложение не подходит для всех размеров дисплея

1

Я создаю приложение для 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>

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

Теги:
tablet

3 ответа

2
Лучший ответ

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

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

  • 0
    Без полноэкранного режима я увидел, что строка заголовка принимает 20px по вертикальной оси, но я не вижу причин для того, чтобы эти компоненты получали 200x600 пикселей моего экрана даже в полноэкранном режиме. Я попробую тебе подойти, чтобы увидеть, что происходит.
1

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

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

Смотрите Android-документы в этом.

1

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

Изменить: на вершине Thorsten Dittmars ответить...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню