#android #layout #graphics #view #clipped
#Android #макет #графика #Вид #обрезанный
Вопрос:
Я разрабатываю приложение для Android (см. Скриншоты).
У меня есть макет, который отлично смотрится в графическом редакторе. Однако нижняя 1/4 экрана обрезается, когда приложение запускается в эмуляторе, а также на телефоне Android. В приложении есть несколько действий, и проблема, похоже, распространена на все из них.
Вот макет, который я использую.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android" android:clipChildren="false" android:clipToPadding="false" android:layout_height="fill_parent">
<ImageView android:layout_height="wrap_content" android:src="@drawable/simpsonstextblack" android:layout_width="fill_parent" android:id="@ id/TitleImage" android:paddingBottom="25dp"></ImageView>
<RelativeLayout android:layout_below="@ id/TitleImage" android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@ id/RelativeLayout1" android:padding="5dp">
<Button android:text="Take the Simpsons Challenge" android:gravity="center" android:clickable="true" android:id="@ id/ChallengeButton" android:layout_width="fill_parent" android:textSize="20dp" android:background="@drawable/buttonbackgroundblue" android:layout_height="50dp"></Button>
<TextView android:layout_width="fill_parent" android:layout_below="@ id/ChallengeButton" android:layout_alignLeft="@ id/ChallengeButton" android:id="@ id/spacer1" android:layout_height="6dp"></TextView>
<Button android:layout_width="fill_parent" android:text="Free Play" android:clickable="true" android:id="@ id/FreePlayButton" android:layout_height="50dp" android:textSize="20dp" android:background="@drawable/buttonbackgroundblue" android:layout_below="@ id/spacer1"></Button>
<TextView android:layout_width="fill_parent" android:id="@ id/spacer2" android:layout_below="@ id/FreePlayButton" android:layout_alignLeft="@ id/FreePlayButton" android:layout_height="6dp"></TextView>
<Button android:layout_height="50dp" android:textSize="20dp" android:id="@ id/HighScoreButton" android:background="@drawable/buttonbackgroundblue" android:layout_width="fill_parent" android:text="High Scores" android:layout_below="@ id/spacer2"></Button>
<TextView android:layout_width="fill_parent" android:id="@ id/spacer3" android:layout_below="@ id/HighScoreButton" android:layout_alignLeft="@ id/HighScoreButton" android:layout_height="6dp"></TextView>
<Button android:layout_height="50dp" android:textSize="20dp" android:id="@ id/HelpButton" android:background="@drawable/buttonbackgroundblue" android:layout_width="fill_parent" android:text="Help" android:layout_below="@ id/spacer3"></Button>
</RelativeLayout>
<RelativeLayout android:layout_below="@ id/RelativeLayout1" android:layout_width="fill_parent" android:id="@ id/RelativeLayout2" android:clipChildren="false" android:clipToPadding="false" android:layout_height="fill_parent">
<TextView android:id="@ id/spacer1" android:layout_width="fill_parent" android:layout_height="30dp"></TextView>
<TextView android:layout_below="@ id/spacer1" android:layout_height="wrap_content" android:layout_width="fill_parent" android:textAppearance="?android:attr/textAppearanceMedium" android:id="@ id/QuoteText" android:text='"A woman is a lot like a refrigerator. Six feet tall, 300 pounds…it makes ice. Heres some extra filler text just to demonstrate to you that if you add enough text it will most likely get clipped at some random point in the screen seemingly for no reason."'></TextView>
</RelativeLayout>
</RelativeLayout>
Комментарии:
1. Я не могу воспроизвести эту проблему на своем устройстве. Когда вы запускаете на своем устройстве, оно показывает то же самое, что и эмулятор?
2. Да, снимок экрана взят из самого эмулятора. Попробуйте добавить еще пару строк текста в нижний текстовый вид и посмотреть, обрезаются ли они.
3. Я говорил, что он может работать должным образом на физическом устройстве, а не в эмуляторе, хотя он должен работать в эмуляторе. Просто пытаюсь исключить такую возможность. Я добавил достаточно строк текста, чтобы он мог прокручиваться за нижнюю часть экрана, но он обрезает его только по краю экрана на моем устройстве.
4. Интересно. Я попробовал более старую версию макета на телефоне друга, и у меня была та же проблема, что и в эмуляторе, но, возможно, некоторые незначительные изменения исправили ее. Я попробую.
5. по-прежнему никаких изменений на телефоне. Проблема, похоже, распространяется на все приложения и, по-видимому, варьируется от телефона к телефону. Существуют ли какие-либо переменные для всего приложения, которые могут управлять этим? Я новичок в разработке, поэтому вполне возможно, что я допустил очень глупую ошибку.
Ответ №1:
Я предполагаю, что ваше приложение работает в режиме совместимости. Попробуйте установить следующее в манифесте:
<supports-screens android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:anyDensity="true" />
Если это проблема, вы можете подробнее прочитать об этом здесь: http://developer.android.com/guide/topics/manifest/supports-screens-element.html .
Короче говоря, Android: значение по умолчанию для больших экранов зависит от версий 🙂
Ответ №2:
Проблема в том, что для вашего последнего TextView ( @ id/QuoteText
) установлено значение android:visibility="invisible"
. Это означает, что содержимое невидимо, но все равно занимает место. Вы хотите использовать android:visibility="gone"
вместо этого.
Я прошу прощения за заявление о том, что раньше он не работал корректно на моем телефоне. Поскольку текст не доходил до нижней части экрана на моем устройстве, я добавил пространство в ImageView вверху, однако это подтолкнуло TextView, который блокирует текст с экрана, поэтому он, похоже, сработал для меня. Надеюсь, это поможет!
Редактировать:
Это тоже не было проблемой. Я считаю, что проблема в том, что ваш нижний RelativeLayout определяется как
<RelativeLayout
android:layout_width="fill_parent"
android:id="@ id/RelativeLayout1"
android:layout_height="200dp">
что придает нижней панели фиксированную высоту. Когда я переключаюсь android:layout_height="200dp"
на android:layout_height="fill_parent"
проблему отсечения, для меня исчезает. Возможно, у вас такая же проблема с другими вашими действиями?
Я не понимаю, почему ваш макет не работает, но я думаю, что вы можете добиться того же проще и эффективнее, используя LinearLayouts вместо RelativeLayouts. И, возможно, это решит вашу проблему на этом пути. Я думаю, что вместо использования ваших разделительных представлений лучше использовать отступы. Вот что я имею в виду:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:id="@ id/TitleImage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="fitStart"
android:src="@drawable/simpsonstextblack" >
</ImageView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@ id/TitleImage"
android:orientation="vertical"
android:padding="5dp" >
<Button
android:id="@ id/ChallengeButton"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:clickable="true"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:text="Take the Simpsons Challenge"
android:textSize="20dp" >
</Button>
<Button
android:id="@ id/FreePlayButton"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:clickable="true"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:text="Free Play"
android:textSize="20dp" >
</Button>
<Button
android:id="@ id/HighScoreButton"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:text="High Scores"
android:textSize="20dp" >
</Button>
<Button
android:id="@ id/HelpButton"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:text="Help"
android:textSize="20dp" >
</Button>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@ id/QuoteText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="30dp"
android:text="amp;quot;A woman is a lot like a refrigerator. Six feet tall, 300 pounds…it makes ice. Heres some extra filler text just to demonstrate to you that if you add enough text it will most likely get clipped at some random point in the screen seemingly for no reason. amp;quot;"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
</LinearLayout>
Комментарии:
1. Я знаю, что textview невидим. Я должен был убрать это, но это не проблема (если я установил для него значение «Ушел», экран по-прежнему обрезается на 75% вниз по экрану и закрывает текст цитаты. Опять же, проблема распространена на все действия в приложении, поэтому проблема, вероятно, не связана с каким-либо отдельным элементом представления.
2. Вы правы, это не было проблемой. Я отредактировал свой ответ, посмотрите, поможет ли это.
3. Не имело никакого эффекта, все равно обрезается.
4. Не могли бы вы обновить свой XML-макет до того, что у вас есть в настоящее время? Кроме того, какова высота изображения, которое вы используете для своего ImageButton?
5. Макет обновлен. Изображение кнопки имеет размер PNG 638 x 93. Может ли проблема иметь какое-либо отношение к удалению строки заголовка / отображению на весь экран?