有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

不同屏幕尺寸的安卓布局的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" />

共 (4) 个答案

  1. # 1 楼答案

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

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

    对galaxy s3使用layout-normal-xhdpi

  2. # 2 楼答案

    不要混淆屏幕大小和密度。这款手机有一个正常大小的屏幕。所以你看到的是好的。还要注意,sw600限定符指的是600 dp的宽度,而不是像素

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

  3. # 3 楼答案

    为什么到处都使用这么多像素值?像素值应该只用于小事情,比如在元素之间填充几个像素。这样做的原因首先是为了避免这样的问题

    例如,为什么要指定按钮的宽度和高度?首先,它们没有文本,为什么不使用ImageButton呢?第二,图片的大小和你想用的大小。与文本字段相同。安卓布局的想法实际上是避免做所有的像素计算,而是相对地做所有事情,这样设备就可以根据自己的硬件做出自己的决定,让它看起来是最好的

    如果你真的想对抗这个系统,可能更容易做到这一点-使用绝对布局,并为所有内容指定精确的像素坐标。否则,请拥抱Android的工作方式,或者准备好迎接痛苦的世界

  4. # 4 楼答案

    在这种情况下,虽然很痛苦,但最好只为Galaxy S3做一个布局,而不是试图重写所有内容来纠正某个制造商的错误

    因此,你会:

    get the model of the phone

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