针对不同屏幕尺寸的android布局问题

时间:2013-01-12 17:22:26

标签: java android

我有一个带有各种按钮和文本视图的Android应用程序。按钮,textviews和edittext字段使用dp的测量在屏幕上间隔开。 例如,一个按钮将具有:'leftint 10dp'的margintop

问题出在高密度手机上。我为更高密度的屏幕创建了一个新的布局,并将它们命名为layout-large或layout-sw600-sw720(因为galaxy s3存在问题)。

但是手机仍然会调用适合480 x 800密度屏幕的普通布局文件。

我读到s3调用了mormal布局文件。因此,如果我将普通文件中的xml更改为高密度的xml,我应该如何处理低密度布局xml?我应该拨打什么文件名,电话会再次调用此文件或普通文件吗?

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/duroodscreen"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp" >

<Button
android:id="@+id/dmute"
android:layout_width="48dp"
android:layout_height="33dp"
android:layout_alignParentLeft="true"
android:background="@drawable/soundon" />

<Button
android:id="@+id/dreset"
style="?android:attr/buttonStyleSmall"
android:layout_width="48dp"
android:layout_height="33dp" 
android:layout_alignParentRight="true"
android:background="@drawable/customresetbutton" />

<TextView
android:id="@+id/dcount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/dmute"
android:layout_marginLeft="25dp"
android:layout_marginTop="36dp"
android:gravity="center"
android:singleLine="true"
android:text="Numbers"
android:textSize="25sp" />

清单中的反思:

<supports-screens 
android:resizeable="true"
android:smallScreens="true" 
android:normalScreens="true" 
android:largeScreens="true"
android:anyDensity="true" />

4 个答案:

答案 0 :(得分:1)

在这种情况下,尽管很痛苦,但最好只为Galaxy S3制作布局而不是尝试重写所有内容以纠正一家制造商的错误。

因此你会:

get the model of the phone

if "galaxy S3" 
   layout with "my_layout_galaxy_s3"
else -> layout with 
   layout with "my_layout"

答案 1 :(得分:1)

不要将屏幕尺寸与密度混淆。这款手机的屏幕尺寸正常。所以你看到的就是好的。另请注意,sw600限定符指的是宽度为600 dp而非像素。

要为其他密度提供资源,请使用密度限定符(mdpi,hdpi,...)。

答案 2 :(得分:1)

layout-normal 表示屏幕的 size ,而不是密度

您必须创建layout-normal-mdpilayout-normal-hdpi个文件

layout-normal-xhdpi用于galaxy s3

答案 3 :(得分:0)

为什么你到处都使用这么多的像素值?像素值应仅用于填充元素之间的几个像素等小事。这样做的原因是首先避免这样的问题。

例如,为什么要指定按钮的宽度和高度?首先,他们没有文字,为什么不使用ImageButton?其次,只需将图像设置为您想要的大小并使用wrap_content。与文本字段相同。 Android布局的想法实际上是为了避免进行所有的像素计算,而是相对地做所有事情,以便设备可以根据硬件做出自己的决定,看起来最好。

如果你真的想要对抗系统,那么可能更容易一直这样做 - 使用AbsoluteLayout并指定所有内容的精确像素坐标。否则就会拥抱Android如何做事或为痛苦世界做好准备。