0

我有一个带有各种按钮和文本视图的 android 应用程序。使用 dp 的测量,按钮、文本视图和编辑文本字段在屏幕上隔开。因此,例如一个按钮将具有:'margintop from left 10dp'

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

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

我读到s3调用了正常的布局文件。那么如果我把普通文件中的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

4 回答 4

1

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

因此,您将:

获取手机型号

if "galaxy S3" 
   layout with "my_layout_galaxy_s3"
else -> layout with 
   layout with "my_layout"
于 2013-01-12T17:32:42.437 回答
1

不要将屏幕尺寸与密度混淆。手机有一个正常大小的屏幕。所以你看到的没问题。另请注意,sw600限定符是指 600 dp 的宽度而不是像素。

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

于 2013-01-12T17:39:00.693 回答
1

layout-normal表示屏幕的大小,不是密度

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

用于layout-normal-xhdpi银河 s3

于 2013-01-12T17:39:25.967 回答
0

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

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

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

于 2013-01-12T17:44:09.350 回答