2011-01-26 1 views
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> 

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

ответ

2

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

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

+0

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

1

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

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

См Android docs on this.

1

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

Edit: сверху Торстен Dittmars ответ ...

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

  • Нет связанных вопросов^_^