图像按钮的位置在不同的手机中显示不同

时间:2013-12-16 20:19:14

标签: android xml imagebutton

我创建了一个有5个图像按钮的xml文件但是当我在手机中运行我的应用程序时,它们不在背景位置(即,不在我想要的位置)。他们获得的位置比我预期的要低一点。这是代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/menuname1" >

<ImageButton
    android:id="@+id/imageButton2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/imageButton1"
    android:layout_centerHorizontal="true"
    android:padding="50dp"
    android:background="@drawable/i1" />

<ImageButton
    android:id="@+id/imageButton1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="130dp"
    android:background="@drawable/i2"
    android:padding="65dp"
    android:scaleType="fitCenter" />

<ImageButton
    android:id="@+id/imageButton3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignTop="@+id/imageButton1"
    android:layout_marginTop="15dp"
    android:background="@drawable/i3"
    android:padding="50dp"
    android:scaleType="fitCenter" />

<ImageButton
    android:id="@+id/imageButton4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignTop="@+id/imageButton3"
    android:background="@drawable/i4"
    android:padding="50dp"
    android:scaleType="fitCenter" />

<ImageButton
    android:id="@+id/imageButton5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/imageButton4"
    android:layout_centerHorizontal="true"
    android:padding="50dp"
    android:scaleType="fitCenter"
    android:background="@drawable/i5" />

</RelativeLayout>

编辑:  我希望所有的图像按钮都相对于imageButton1(imageButton1的左边,它们之间没有空格),而imageButton1应该相对于手机的中心(不在精确的中心,只是相对于它)。在我的背景中,我画了一个分隔符,以时尚的方式分隔所有按钮,但我的按钮不是相对于它。我希望按钮放在距离底部40%的位置。我能做到吗。

2 个答案:

答案 0 :(得分:0)

Android并不知道控件的确切对齐方式。他们有意灵活地使他们充分利用他们给出的屏幕尺寸和形状。这并不是说你运气不好。尝试明确设置按钮的宽度和高度。目前,它们是wrap_content,如果手机上的像素密度与模拟器或其他任何地方的像素密度略有不同,那么图像可能会略有不同。设置固定数量的dp并考虑将按钮彼此相对而不是相对于父项。我假设您使用的是RelativeLayout,因为您在这些孩子身上使用了密钥。而不是layout_above等,只需设置layout_marginToplayout_marginLeft与父边缘的距离。

另外,整理你的XML - 尝试将密钥保持在相同的顺序,因为它更容易发现问题。当您使用@id/时,请不要始终使用@+id/。你只应该在xml文件中第一次提到id时使用+

答案 1 :(得分:0)

使用维度XML文件可以提供帮助。见Using configuration qualifiers。在您的情况下,具有不同值的文件夹及其自己的dimens.xml文件将允许您为不同的设备设置不同的维度。

就像,这是你的一个ImageButtons:

<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="@dimen/image_button_one_margin_bottom"
android:background="@drawable/i2"
android:padding="@dimen/image_button_one_padding"
android:scaleType="fitCenter" />

然后在dimens.xml文件中(类似于默认values文件夹中的文件):

<dimen name="image_button_one_margin_bottom">130dp</dimen>
<dimen name="image_button_one_padding">65dp</dimen>

您将相同的dimens.xml文件放在不同的value-xxxx文件夹中,以定位不同的屏幕尺寸和/或密度,例如:

values-small
values-normal
values-normal-mdpi
etc.

您可以将值(130dp和65dp)设置为对这些设备更有效的不同值。

另一种方法是使用不同的布局文件夹,在不同设备的文件夹中使用相同的布局文件。