#android #compatibility #tabwidget
#Android #совместимость #tabwidget
Вопрос:
Я создаю приложение, которое содержит TabWidget вверху. Все выглядит нормально, за исключением того, что при меньших размерах экрана содержимое вкладки «исчезает» с нижней части экрана. Я искал решение, использовал только dp / sp, чтобы помочь макету правильно масштабироваться.. но ничего не сработает.
Я полагаю, проблема в tabwidget, поскольку, похоже, он не масштабируется до новых размеров экрана. Я не знаю, как обеспечить, чтобы мой tabcontent отображался на всех экранах? XML-файл моей активности на вкладке приведен ниже:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:typeface="monospace"
android:background="@drawable/target"
android:paddingRight="25dp"
android:paddingLeft="25dp"
android:paddingTop="15dp">
<TextView
android:text="Convert from:"
android:id="@ id/convertFrom"
android:textColor="#000000"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:typeface="monospace"
android:textSize="16dp"/>
<EditText
android:inputType="numberDecimal"
android:id="@ id/numberInput"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="16dp"
android:layout_below="@id/convertFrom"/>
<Spinner
android:id="@ id/spinner_one"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textSize="16dp"
android:layout_below="@id/numberInput"></Spinner>
<TextView
android:text="Convert to:"
android:typeface="monospace"
android:id="@ id/text_to"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#000000"
android:textSize="16dp"
android:layout_marginTop="20dp"
android:layout_below="@id/spinner_one"/>
<Spinner
android:id="@ id/spinner_two"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textSize="16dp"
android:layout_below="@id/text_to"></Spinner>
<Button
android:id="@ id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:textSize="16dp"
android:text="@string/app_name"
android:layout_below="@id/spinner_two"/>
<TextView
android:id="@ id/thisequals"
android:layout_marginTop="45dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textSize="20dp"
android:layout_below="@id/button"
android:maxLines="1"
layout_alignParentRight="true"
layout_alignParentLeft="true"/>
<TextView
android:id="@ id/answer"
android:textColor="#FF4400"
android:layout_centerHorizontal="true"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="26dp"
android:typeface="sans"
android:maxLines="1"
android:layout_below="@id/thisequals"/>
<TextView
android:id="@ id/ofthis"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textSize="20dp"
android:layout_below="@id/answer"/>
</RelativeLayout>
И это main.xml (при необходимости) :
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</FrameLayout>
</LinearLayout>
</TabHost>
вот изображение проблемы (на обоих экранах должно отображаться одно и то же.. один HVGA и QVGA)
http://dl.dropbox.com/u/15931335/appproblem.jpg
Спасибо!
Ответ №1:
Кажется, для этого макета недостаточно места только из-за небольшого размера экрана. Это нормальная ситуация, когда вы имеете дело с устройствами с маленьким экраном. Вы можете поместить этот макет в режим прокрутки или уменьшить его, чтобы он соответствовал размеру экрана smalles. Я думаю, вы можете считать экран 320×240 ldpi самым маленьким.
Комментарии:
1. хорошо, я понимаю.. Мне действительно хотелось сохранить все это на одном экране, поэтому я не решаюсь использовать ScrollView. Однако, если я создам приложение так, чтобы оно полностью помещалось на самом маленьком экране, будет ли оно занимать только часть экрана большего размера? Есть ли способ заставить его растягиваться, чтобы он одинаково подходил ко всем экранам?
2. Вы можете спроектировать свое приложение так, чтобы оно выглядело по-разному на разных экранах. Я не уверен, что есть способ поддерживать все экраны, чтобы макет выглядел хорошо на всех экранах. Иногда это возможно, а иногда нет. В вашем случае я бы сделал макет более компактным.
Ответ №2:
Не могли бы вы попробовать заменить свои атрибуты LinearLayout в main.xml с помощью этого
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp"
android:orientation="vertical">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:weight="1.0">
</FrameLayout>
</LinearLayout>