不同屏幕尺寸的安卓布局的java问题
我有一个安卓应用程序,有各种按钮和文本视图。按钮、文本视图和编辑文本字段在屏幕上使用dp测量值隔开。 例如,一个按钮会有:“从左到右的margintop 10dp”
问题在于高密度手机。我为更高密度的屏幕创建了一个新的布局,并将它们命名为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:安卓="http://schemas.安卓.com/apk/res/安卓"
安卓:layout_width="match_parent"
安卓:layout_height="match_parent"
安卓:background="@drawable/duroodscreen"
安卓:paddingLeft="5dp"
安卓:paddingRight="5dp"
安卓:paddingTop="5dp" >
<Button
安卓:id="@+id/dmute"
安卓:layout_width="48dp"
安卓:layout_height="33dp"
安卓:layout_alignParentLeft="true"
安卓:background="@drawable/soundon" />
<Button
安卓:id="@+id/dreset"
style="?安卓:attr/buttonStyleSmall"
安卓:layout_width="48dp"
安卓:layout_height="33dp"
安卓:layout_alignParentRight="true"
安卓:background="@drawable/customresetbutton" />
<TextView
安卓:id="@+id/dcount"
安卓:layout_width="wrap_content"
安卓:layout_height="wrap_content"
安卓:layout_alignParentLeft="true"
安卓:layout_below="@+id/dmute"
安卓:layout_marginLeft="25dp"
安卓:layout_marginTop="36dp"
安卓:gravity="center"
安卓:singleLine="true"
安卓:text="Numbers"
安卓:textSize="25sp" />
清单中的引用:
<supports-screens
安卓:resizeable="true"
安卓:smallScreens="true"
安卓:normalScreens="true"
安卓:largeScreens="true"
安卓:anyDensity="true" />
# 1 楼答案
布局正常表示屏幕的大小,而不是密度
您必须创建
layout-normal-mdpi
和layout-normal-hdpi
文件对galaxy s3使用
layout-normal-xhdpi
# 2 楼答案
不要混淆屏幕大小和密度。这款手机有一个正常大小的屏幕。所以你看到的是好的。还要注意,
sw600
限定符指的是600 dp的宽度,而不是像素要为其他密度提供资源,请使用密度限定符(mdpi、hdpi等)
# 3 楼答案
为什么到处都使用这么多像素值?像素值应该只用于小事情,比如在元素之间填充几个像素。这样做的原因首先是为了避免这样的问题
例如,为什么要指定按钮的宽度和高度?首先,它们没有文本,为什么不使用ImageButton呢?第二,图片的大小和你想用的大小。与文本字段相同。安卓布局的想法实际上是避免做所有的像素计算,而是相对地做所有事情,这样设备就可以根据自己的硬件做出自己的决定,让它看起来是最好的
如果你真的想对抗这个系统,可能更容易做到这一点-使用绝对布局,并为所有内容指定精确的像素坐标。否则,请拥抱Android的工作方式,或者准备好迎接痛苦的世界
# 4 楼答案
在这种情况下,虽然很痛苦,但最好只为Galaxy S3做一个布局,而不是试图重写所有内容来纠正某个制造商的错误
因此,你会:
get the model of the phone