Я создаю приложение для 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>
И таким образом, левая и нижняя части изображения обрезаются на экране.
Не используйте Display.getWidth/Height(). Они возвращают необработанный размер дисплея. Это не столько, сколько у вас на самом деле. Например, строка состояния уменьшит фактическое пространство, которое у вас есть, на некоторую величину undefined вдоль некоторой оси. И не думайте, что использование FLAG_FULLSCREEN избавит вас от этого, потому что вполне разумно, что устройство имеет "панель состояния", содержащую такие вещи, как кнопка "Назад" и "Дом", и, следовательно, вы не можете избавиться от нее.
Правильный способ изменения размера экрана - через систему просмотра. Самое простое здесь - сделать подкласс View, который реализует onSizeChanged() и вставлять его в setContentView(). Как только макет пройдет, ваш onSizeChanged() будет вызван с пространством, доступным для представления. Это будет вызываться всякий раз, когда это пространство изменяется - из-за изменения ориентации, изменения отображения, отображения IME и т.д.
Помогает ли оно указывать соответствующее значение в манифесте:
<supports-screens android:smallScreens=["true" | "false"]
android:normalScreens=["true" | "false"]
android:largeScreens=["true" | "false"]
android:anyDensity=["true" | "false"] />
Смотрите Android-документы в этом.
Что у вас есть в XML? Заполнить родительский или обернуть контент для представления? вам нужно сначала в зависимости от того, что вы делаете...
Изменить: на вершине Thorsten Dittmars ответить...