我正在开发一个支持多种屏幕大小的Android 2.2.2应用程序,所有屏幕都是纵向的。我不会支持风景。
我在HTC Desire和三星Galaxy Tab 7.7上测试了以下布局。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/no_conectado"
android:orientation="vertical" >
<TextView
android:id="@+id/labelSelGateName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginTop="80dp" />
<TextView
android:id="@+id/labelSelOpened"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
<ProgressBar
android:id="@+id/indicatorActivityView"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginTop="22dp"
android:layout_gravity="center_horizontal" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="110dp"
android:layout_marginTop="60dp"
android:orientation="horizontal" >
<ImageButton
android:id="@+id/btnMyGates"
android:layout_width="50dp"
android:layout_height="110dp"
android:layout_marginLeft="20dp"
android:layout_weight=".33"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onGateClick" />
<LinearLayout
android:layout_width="90dp"
android:layout_height="110dp"
android:layout_weight=".33"
android:orientation="vertical" >
<ImageButton
android:id="@+id/btnOpen"
android:layout_width="90dp"
android:layout_height="55dp"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onOpenDoorClick" />
<ImageButton
android:id="@+id/btnClose"
android:layout_width="90dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onCloseDoorClick" />
</LinearLayout>
<ImageButton
android:id="@+id/btnOptions"
android:layout_width="50dp"
android:layout_height="110dp"
android:layout_marginRight="20dp"
android:layout_weight=".33"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onOptionClick" />
</LinearLayout>
<ImageButton
android:id="@+id/btnFaqs"
android:layout_width="110dp"
android:layout_height="60dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onFAQClick" />
<ImageButton
android:id="@+id/btnInfo"
android:layout_width="110dp"
android:layout_height="60dp"
android:layout_gravity="right"
android:layout_marginTop="20dp"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onInfoClick" />
</LinearLayout>
我有ldpi,mdpi,hdpi和x-hdpi的图像。
背景图片看起来很棒,但是当我在Samsung Galaxy Tab上测试时,所有小部件(TextView
,ProgressBar
,ImageButton
等)都处于正确的位置。
我使用'Nexus One`作为模型在Eclipse上设计了这个布局。
Here人们建议我每个屏幕尺寸和密度只使用一种布局,但它不起作用。我正在使用dp
单位和fill_parent
等,但在Galaxy Tab上却有所不同。
我需要x-large
屏幕尺寸的布局吗?
答案 0 :(得分:6)
事实上,您收到的建议很好:可能只有一个布局文件,但正如评论中已经建议的那样, 硬编码维度不好 即使您使用dp
或dip
,特别是当您定位所有可用的屏幕尺寸和密度时。
相反,您应 使用指向维值 的链接替换这些值。
例如,代替android:layout_marginLeft="10dp"
,您将拥有类似
android:layout_marginLeft="@dimen/textview_margin_left"
其中 textview_margin_left 在dimens.xml中定义,在不同文件夹中具有不同的值;
可能在文件夹 值 :<dimen name="textview_margin_left">10dp</dimen>
,
在文件夹 values-large :<dimen name="textview_margin_left">20dp</dimen>
,
在 values-xlarge :<dimen name="textview_margin_left">30dp</dimen>
但这只是一个示例,您必须测试所有尺寸和分辨率,并找到适合您布局的最佳值。在 Eclipse 中,在Graphical Layout
模式下,只需点击 Nexus One ,然后选择其他设备,即可轻松了解布局在各种设备上的显示效果列表中的模型,布局将自动更新。
此外,您可以移动dimens.xml
所有文字大小,这对x-large设备非常有用。
只使用一个RelativeLayout
代替许多重叠LinearLayouts
也可能是一个好主意,并使用对象的相对定位,而不是一些硬编码值。
答案 1 :(得分:1)
问题在于您在布局中使用静态值(100dp,60dp)。现在问题在于更高的分辨率,这个dp是不相同的。
这意味着你应该为x大屏幕创建一个布局。我也不会使用这些静态值。比你的应用程序在许多不同的屏幕上表现得好!
度过美好的一天
狩猎