如何将小部件与背景上的某个位置对齐,还可以在不同的设备上显示?

时间:2013-03-07 20:58:02

标签: android android-layout android-widget android-edittext android-ui

我不是设计师,但最近,我被要求更改我公司应用的登录界面UI。

我有一个设计师的背景图片。此图像是完整的登录屏幕。这意味着它是一个PNG文件,上面有输入框(用户名和密码框)。

当然,即使它看起来像一个完整的登录屏幕,只是把它放在那里将无法工作,因为输入框是假的。

我试图在其上放置EditText小部件,试图将它放在背景图像上的位置,并将这两个小部件背景设置为无,这样用户就不会看到它。但是,在不同的设备上,它只是显示不正确。有时在“背景输入框”上方,有时在其下方。无论如何,它只是不适合那里。

我想知道是否有办法让我解决这个问题。无论设备如何变化,都让小部件位于背景的正确位置。

现在是我的布局,希望它会有所帮助:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mainTableLayout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/pbackground"
    android:stretchColumns="1" >

    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="match_parent"
        android:layout_height="160dp" >

        <EditText
            android:id="@+id/txtBxPassword"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="10dp"
            android:ems="10"
            android:gravity="center_vertical|center_horizontal|center"
            android:height="33dp"
            android:password="true"
            android:singleLine="true"
            android:width="160dp" >

            <requestFocus />
        </EditText>

        <EditText
            android:id="@+id/txtBxUserID"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_above="@+id/txtBxPassword"
            android:layout_alignLeft="@+id/txtBxPassword"
            android:layout_marginBottom="10dp"
            android:ems="10"
            android:gravity="center_vertical|center_horizontal|center"
            android:height="33dp"
            android:singleLine="true"
            android:width="160dp" />

    </RelativeLayout>
</RelativeLayout>

以下是我从Eclipse捕获的图像,您可以看到我在背景上的输入框位置放置了两个EditText框。但在真实设备上,它们将被放错地方。

谢谢!

2 个答案:

答案 0 :(得分:0)

将linearlayout作为基本布局而不是相对布局... 并使用tablerow布局并将小部件放在其中 明智地使用android:layout_margin和android:layout_width和android:layout_height 正确... 希望它会有所帮助

答案 1 :(得分:0)

您应该让设计师为您提供各个元素的文件 - 例如挂锁&amp;自己头上的图标,以及自己的阴影框。将框转换为Nine-patch并将其设置为合适布局元素的背景可绘制(即每行的容器布局)。

您还希望拥有multiple sizes of each image to support different pixel densities

如果你不这样做,你总会有一些屏幕看起来很糟糕的设备。