我有一个带有各种按钮和文本视图的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" />
答案 0 :(得分:1)
在这种情况下,尽管很痛苦,但最好只为Galaxy S3制作布局而不是尝试重写所有内容以纠正一家制造商的错误。
因此你会:
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-mdpi
和layout-normal-hdpi
个文件
将layout-normal-xhdpi
用于galaxy s3
答案 3 :(得分:0)
为什么你到处都使用这么多的像素值?像素值应仅用于填充元素之间的几个像素等小事。这样做的原因是首先避免这样的问题。
例如,为什么要指定按钮的宽度和高度?首先,他们没有文字,为什么不使用ImageButton?其次,只需将图像设置为您想要的大小并使用wrap_content。与文本字段相同。 Android布局的想法实际上是为了避免进行所有的像素计算,而是相对地做所有事情,以便设备可以根据硬件做出自己的决定,看起来最好。
如果你真的想要对抗系统,那么可能更容易一直这样做 - 使用AbsoluteLayout并指定所有内容的精确像素坐标。否则就会拥抱Android如何做事或为痛苦世界做好准备。