我正在开发一个多屏幕Android 2.2.2应用程序。
使用 eclipse (Juno发布)图形布局测试不同的屏幕尺寸。这就是我所拥有的。
main_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/no_conectado" >
<TextView
android:id="@+id/labelSelGateName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/labelSelGateName_marginTop"
android:gravity="center_horizontal"
android:textSize="@dimen/labelSelGateName_textsize" />
<TextView
android:id="@+id/labelSelOpened"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/labelSelGateName"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/labelSelOpened_marginTop"
android:gravity="center_horizontal"
android:textSize="@dimen/labelSelOpened_textsize" />
<ProgressBar
android:id="@+id/indicatorActivityView"
android:layout_width="@dimen/indicatorActivityView_height"
android:layout_height="@dimen/indicatorActivityView_width"
android:layout_below="@+id/labelSelOpened"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/indicatorActivityView_marginTop" />
<ImageButton
android:id="@+id/btnMyGates"
android:layout_width="@dimen/btnMyGates_width"
android:layout_height="@dimen/btnMyGates_height"
android:layout_alignParentLeft="true"
android:layout_below="@+id/indicatorActivityView"
android:layout_marginLeft="@dimen/btnMyGates_marginLeft"
android:layout_marginTop="@dimen/btnMyGates_marginTop"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onGateClick" />
<ImageButton
android:id="@+id/btnOpen"
android:layout_width="@dimen/btnOpen_width"
android:layout_height="@dimen/btnOpen_height"
android:layout_alignTop="@+id/btnMyGates"
android:layout_centerHorizontal="true"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onOpenDoorClick" />
<ImageButton
android:id="@+id/btnClose"
android:layout_width="@dimen/btnClose_width"
android:layout_height="@dimen/btnClose_height"
android:layout_alignBottom="@+id/btnMyGates"
android:layout_alignLeft="@+id/btnOpen"
android:layout_marginBottom="@dimen/btnClose_marginBottom"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onCloseDoorClick" />
<ImageButton
android:id="@+id/btnOptions"
android:layout_width="@dimen/btnOptions_width"
android:layout_height="@dimen/btnOptions_height"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/btnMyGates"
android:layout_marginRight="@dimen/btnOptions_marginRight"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onOptionClick" />
<ImageButton
android:id="@+id/btnFaqs"
android:layout_width="@dimen/btnFaqs_width"
android:layout_height="@dimen/btnFaqs_height"
android:layout_marginTop="@dimen/btnFaqs_marginTop"
android:layout_toLeftOf="@+id/btnOptions"
android:layout_below="@+id/btnClose"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onFAQClick" />
<ImageButton
android:id="@+id/btnInfo"
android:layout_width="@dimen/btnInfo_width"
android:layout_height="@dimen/btnInfo_height"
android:layout_alignLeft="@+id/btnOptions"
android:layout_alignParentBottom="true"
android:layout_marginLeft="@dimen/btnInfo_marginLeft"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onInfoClick" />
</RelativeLayout>
dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="labelSelGateName_marginTop">40dp</dimen>
<dimen name="labelSelGateName_textsize">14sp</dimen>
<dimen name="labelSelOpened_marginTop">0dp</dimen>
<dimen name="labelSelOpened_textsize">14sp</dimen>
<dimen name="indicatorActivityView_width">20dp</dimen>
<dimen name="indicatorActivityView_height">20dp</dimen>
<dimen name="indicatorActivityView_marginTop">28dp</dimen>
<dimen name="btnMyGates_width">70dp</dimen>
<dimen name="btnMyGates_height">110dp</dimen>
<dimen name="btnMyGates_marginLeft">29dp</dimen>
<dimen name="btnMyGates_marginTop">60dp</dimen>
<dimen name="btnOpen_width">90dp</dimen>
<dimen name="btnOpen_height">55dp</dimen>
<dimen name="btnClose_width">90dp</dimen>
<dimen name="btnClose_height">50dp</dimen>
<dimen name="btnClose_marginBottom">0dp</dimen>
<dimen name="btnOptions_width">70dp</dimen>
<dimen name="btnOptions_height">110dp</dimen>
<dimen name="btnOptions_marginRight">30dp</dimen>
<dimen name="btnFaqs_width">110dp</dimen>
<dimen name="btnFaqs_height">70dp</dimen>
<dimen name="btnFaqs_marginTop">10dp</dimen>
<dimen name="btnInfo_width">110dp</dimen>
<dimen name="btnInfo_height">60dp</dimen>
<dimen name="btnInfo_marginLeft">14dp</dimen>
</resources>
我在这些文件夹中有四个dimens.xml
:values-small
,values-normal
,values-large
和values-xlarge
。
使用这些文件,它在Nexus One
,7in WSVGA Tablet
和10.1in WXGA Tablet
中看起来很不错。但是,它在Galaxy Nexus
,5.4 FWVGA
,5.1 WVGA
和4.7in WXGA
中看起来并不好看。
当我说它看起来并不好看时,我的意思是每个TextView
,ImageButton
等已经移动,而且它们并没有在正确的位置。
我需要更多文件吗?
答案 0 :(得分:1)
我认为这是Android初始设计的限制 - 它的XML布局不允许指定类似于HTML表格的基于百分比或类似表格的布局,即没有精确尺寸的布局。
“weight”属性不是一个选项,因为当我尝试指定任意布局时,Eclipse告诉我“嵌套权重对性能不利”
限定符也不是一个好的架构师解决方案,因为两个不同的设备可以在相同的“屏幕密度”对下合格,例如HTC One S / HTC One X.这就是为什么Google重新设计它引入swdp限定符的原因3.X。
对于Android 2.3,您可以创建针对480x800优化的“默认”UI,并在屏幕中心进行布局。它在540x960和更高的屏幕上看起来会更小,但仍然没有损坏。
答案 1 :(得分:0)
Galaxy Nexus屏幕normal
(分辨率为1280 x 720
)且密度为xhdpi
。
答案 2 :(得分:0)
galaxy nexus(和galaxy s3,以及htc one x)具有正常的屏幕尺寸,具有xhdpi密度。
参考:
http://www.youtube.com/watch?feature=player_detailpage&v=PwC1OlJo5VM#t=3047s