如何使布局在不同设备中保持一致

时间:2014-02-13 03:53:31

标签: android xml android-layout user-interface

我在2个不同设备的布局外观方面遇到了问题。我已经包含了不同尺寸的drawable,但是在1个设备中布局看起来很奇怪。

我附上图片以了解布局的变化。

对于HTC Sensation XE,OS 4.0.3,4.3英寸QHD分辨率,布局似乎没问题。

Layout For HTC Sensation

对于Galaxy S4,OS 4.3,最后4个EditTexts似乎是空白的。 Layout for Galaxy S4

以下是布局的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" >

<ImageView
    android:id="@id/top_bar_view"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:background="@drawable/top_bar"
    android:contentDescription="@string/content" />

<TextView
    android:id="@+id/txt_recipient"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="18dp"
    android:padding="8dp"
    android:text="@string/text_recipient"
    android:textColor="#FFFFFF"
    android:textSize="16sp" />

<RelativeLayout
    android:id="@+id/Rlayout_recipient"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/top_bar_view"
    android:background="@drawable/bg" >

    <EditText
        android:id="@+id/edt_rec_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="22dp"
        android:background="@drawable/border_email"
        android:ems="10"
        android:hint="@string/name_hint"
        android:inputType="text"
        android:padding="6dp"
        android:textColor="#FFFFFF"
        android:textColorHint="#FFFFFF" />

    <EditText
        android:id="@+id/edt_rec_addr1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/edt_rec_name"
        android:layout_centerHorizontal="true"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="20dp"
        android:background="@drawable/border_email"
        android:ems="10"
        android:hint="@string/addr1_hint"
        android:inputType="text"
        android:padding="6dp"
        android:textColor="#FFFFFF"
        android:textColorHint="#FFFFFF" />

    <EditText
        android:id="@+id/edt_rec_addr2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/edt_rec_addr1"
        android:layout_centerHorizontal="true"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="20dp"
        android:background="@drawable/border_email"
        android:ems="10"
        android:hint="@string/addr2_hint"
        android:inputType="text"
        android:padding="6dp"
        android:textColor="#FFFFFF"
        android:textColorHint="#FFFFFF" />

    <LinearLayout
        android:id="@+id/addr_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/edt_rec_addr2"
        android:layout_alignRight="@+id/edt_rec_addr2"
        android:layout_below="@+id/edt_rec_addr2"
        android:layout_marginTop="20dp"
        android:background="@drawable/border_email" >

        <EditText
            android:id="@+id/edt_rec_city"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:ems="10"
            android:hint="@string/city_hint"
            android:inputType="text"
            android:padding="6dp"
            android:textColor="#FFFFFF"
            android:textColorHint="#FFFFFF" />

        <EditText
            android:id="@+id/edt_rec_state"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:ems="10"
            android:gravity="center"
            android:hint="@string/state_hint"
            android:inputType="text"
            android:padding="6dp"
            android:textColor="#FFFFFF"
            android:textColorHint="#FFFFFF" />

        <EditText
            android:id="@+id/edt_rec_postcode"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:ems="10"
            android:gravity="center"
            android:hint="@string/postcode_hint"
            android:inputType="number"
            android:padding="6dp"
            android:textColor="#FFFFFF"
            android:textColorHint="#FFFFFF" />

        <EditText
            android:id="@+id/edt_rec_ctry"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
            android:ems="10"
            android:focusable="false"
            android:gravity="center"
            android:hint="@string/country_hint"
            android:inputType="text"
            android:padding="6dp"
            android:textColor="#FFFFFF"
            android:textColorHint="#FFFFFF" />
    </LinearLayout>
</RelativeLayout>

<ImageButton
    android:id="@id/btn_save"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:layout_marginRight="14dp"
    android:contentDescription="@string/content"
    android:src="@drawable/icon_save_iphone" />

<ImageButton
    android:id="@id/btn_cancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="16dp"
    android:contentDescription="@string/content"
    android:src="@drawable/icon_cancel_iphone" />

<Button
    android:id="@+id/btn_contacts"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/txt_recipient"
    android:layout_marginRight="23dp"
    android:layout_toLeftOf="@id/btn_save"
    android:text="@string/addr_book" />

</RelativeLayout>

有人可以指导,因为我是Android编程的初学者。

1 个答案:

答案 0 :(得分:1)

如果没有为EditTexts指定背景,他们将使用主题中的默认值。如果您没有使用Holo主题,那么设备的默认主题可能无法预测,因为所有设备制造商都喜欢以各种方式重新设置默认主题。

如果您希望所有设备上都有隐身背景,请在其上设置android:background="@null"android:background="#00000000"

请注意,在您的热门图片中,底部编辑文本显示该设备默认主题的细长下划线。明确设置null或不可见背景将确保无论主题如何都相同。或者你可以将你的主题设置为Holo或Holo的一些后代,因为它是所有设备上唯一保证相同的主题(没有制造商reskins)。

如果您想支持早于Honeycomb的设备,因此无法在旧设备上使用Holo,则需要指定主题并根据需要强制执行文本颜色和背景。一种简单的方法是使用this site为您生成主题,然后根据需要进行编辑。这将确保涵盖所有基地。