2013-01-12 103 views
0

我有一个Android应用程序与各种按钮和文本视图。使用dp的测量,按钮,textviews和edittext字段在屏幕上四处分布。 因此,例如,一个按钮将具有:'从左边10dp的边际'问题与Android布局不同的屏幕尺寸

问题是高密度电话。我为高密度屏幕创建了一个新的布局,并将它们命名为layout-large或layout-sw600-sw720(问题在于galaxy s3)。

但手机仍然保持通话480 * 800

我读的是S3调用例正常布局文件,该文件是适用于密度屏幕的正常布局文件。因此,如果我将普通文件中的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" /> 

REFFERENCE在清单:

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

你用什么代码来显示?你可以在其中包含一些关于你已经完成的代码,然后我认为它可能会更清楚。 –

+0

@Nitesh Verma我现在添加了代码 – Mustafa

回答

1

布局正常指示屏幕的大小,而不是密度

你必须创建layout-normal-mdpilayout-normal-hdpi文件

使用layout-normal-xhdpi银河S3

+0

所以s3会在layout-normal-hdpi或layout-normal-xhdpi下面? – Mustafa

+1

签出,它属于xhdpi。我将它添加到答案 –

+0

布洛赫谢谢花花公子,s3是xhdpi – Mustafa

1

在这种情况下,尽可能多的痛苦是的,它很可能是更明智的布局只是为了银河S3而不是试图改写一切来纠正一个制造商的错误。

因此,你会:

get the model of the phone

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

我认为它会影响所有具有相同资源的手机 – Mustafa

+0

看起来好像我可能需要使用上面的代码,我在哪里放置它?在上面的java类中setContentView? – Mustafa

+1

您可以将其放置在任何要使用布局的位置。您可能需要一个类似于'useLayout(Context ctx,int layoutId)'的实用程序类,然后在其中放入检查。 – DeeV

1

不要混淆密度的屏幕尺寸。手机的屏幕尺寸正常。所以你看到的是好的。还要注意,sw600限定符指的是600dp而不是像素的宽度。

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

0

为什么你在任何地方使用如此多的像素值?像素值只能用于像元素之间填充几个像素这样的小东西。原因是首先避免这样的问题。

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

如果您确实想要与系统进行对抗,则可能会更容易完成此操作 - 使用AbsoluteLayout并为所有内容指定精确的像素坐标。否则,请拥抱Android如何做事或准备好迎接痛苦的世界。