不同设备的布局查询

时间:2014-08-15 10:06:43

标签: android android-layout

我在Android中设计了一款Native应用。我的查询很少,我不太清楚:

  1. 我们是否真的需要为所有类型的设备(xhdpi,mdpi,hdpi等)定义布局xml,如果想要支持所有尺寸的设备,或者只有一种布局可以在所有尺寸的设备中使用?< / p>

  2. 我在我的应用中创建了几个按钮,这些按钮将放置在设备的中心底部和顶部。我已经使用了相对和线性布局,dp用于按钮和布局的宽度。但它并没有在每个设备上显示相似之处,我是否需要为所有类型的设备重新设计应用程序?

            <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:id="@+id/Container"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:ignore="MergeRootFrame" >
    
                <LinearLayout
                    android:id="@+id/linearLayout1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentRight="true"
                    android:orientation="vertical" >
    
                    <RelativeLayout
                        android:layout_width="match_parent"
                        android:layout_height="118dip" >
                    </RelativeLayout>
                </LinearLayout>
    
                <LinearLayout
                    android:id="@+id/linearLayout2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentLeft="true"
                    android:layout_below="@+id/linearLayout1"
                    android:background="@drawable/blackboard"
                    android:orientation="vertical" >
    
                    <RelativeLayout
                        android:layout_width="wrap_content"
                        android:layout_height="346dp" >
    
                        <View
                            android:id="@+id/view2"
                            android:layout_width="180dip"
                            android:layout_height="3dip"
                            android:layout_alignRight="@+id/result"
                            android:layout_below="@+id/second"
                            android:layout_marginTop="22dip"
                            android:background="#0000ff" />
    
                        <Button
                            android:id="@+id/second"
                            android:layout_width="150dip"
                            android:layout_height="50dip"
                            android:layout_alignLeft="@+id/first"
                            android:layout_centerVertical="true"
                            android:background="@drawable/curve_shape"
                            android:text="2"
                            android:textSize="30sp" />
    
                        <Button
                            android:id="@+id/first"
                            android:layout_width="150dip"
                            android:layout_height="50dip"
                            android:layout_above="@+id/second"
                            android:layout_alignParentRight="true"
                            android:layout_marginBottom="56dip"
                            android:layout_marginRight="190dip"
                            android:background="@drawable/curve_shape"
                            android:text="1"
                            android:textSize="30sp" />
    
                        <Button
                            android:id="@+id/result"
                            android:layout_width="150dip"
                            android:layout_height="50dip"
                            android:layout_alignLeft="@+id/second"
                            android:layout_below="@+id/view2"
                            android:layout_marginTop="27dp"
                            android:background="@drawable/curve_shape"
                            android:text="res" />
                    </RelativeLayout>
                </LinearLayout>
    
                <Button
                    android:id="@+id/ansBtn3"
                    android:layout_width="114dp"
                    android:layout_height="wrap_content"
                    android:layout_alignLeft="@+id/ansBtn2"
                    android:layout_alignRight="@+id/ansBtn2"
                    android:layout_below="@+id/linearLayout2"
                    android:layout_marginTop="58dp"
                    android:onClick="checkResult"
                    android:text="2345" />
    
                <Button
                    android:id="@+id/ansBtn1"
                    android:layout_width="180dip"
                    android:layout_height="wrap_content"
                    android:layout_alignLeft="@+id/ansBtn4"
                    android:layout_below="@+id/ansBtn4"
                    android:layout_marginTop="39dp"
                    android:onClick="checkResult"
                    android:text="2345" />
    
                <Button
                    android:id="@+id/ansBtn2"
                    android:layout_width="180dip"
                    android:layout_height="wrap_content"
                    android:layout_alignBaseline="@+id/ansBtn1"
                    android:layout_alignBottom="@+id/ansBtn1"
                    android:layout_alignParentLeft="true"
                    android:layout_marginLeft="31dp"
                    android:onClick="checkResult"
                    android:text="2345" />
    
                <Button
                    android:id="@+id/ansBtn4"
                    android:layout_width="118dp"
                    android:layout_height="wrap_content"
                    android:layout_alignBaseline="@+id/ansBtn3"
                    android:layout_alignBottom="@+id/ansBtn3"
                    android:layout_marginLeft="68dp"
                    android:layout_toRightOf="@+id/ansBtn3"
                    android:onClick="checkResult"
                    android:text="2345" />
    
            </RelativeLayout>
    

    Actually i want this type of ui

2 个答案:

答案 0 :(得分:1)

  1. xhdpi和hdpi等实际上并没有定义屏幕大小。它们是屏幕密度的标识符(read more)您可以为所有这些标识符设置一个布局。但是,最好使用所有这些密度的图像来保持所有设备的UI质量一致

  2. 这样的事情:

    <LinearLayout
        android:id="@+id/linearLayout2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:background="@drawable/blackboard"
        android:gravity="center"
        android:orientation="vertical" >
    
        <Button
            android:id="@+id/first"
            android:layout_width="150dip"
            android:layout_height="50dip"
            android:layout_marginBottom="56dip"
            android:background="@drawable/curve_shape"
            android:text="1"
            android:textSize="30sp" />
    
            <Button
                android:id="@+id/second"
                android:layout_width="150dip"
                android:layout_height="50dip"
                android:background="@drawable/curve_shape"
                android:text="2"
                android:textSize="30sp" />
    
            <View
                android:id="@+id/view2"
                android:layout_width="180dip"
                android:layout_height="3dip"
                android:layout_marginTop="22dip"
                android:background="#0000ff" />
    
            <Button
                android:id="@+id/result"
                android:layout_width="150dip"
                android:layout_height="50dip"
                android:layout_marginTop="27dp"
                android:background="@drawable/curve_shape"
                android:text="res" />
    </LinearLayout>
    
    <Button
        android:id="@+id/ansBtn3"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/ansBtn2"
        android:layout_alignRight="@+id/ansBtn2"
        android:layout_marginBottom="20dp"
        android:layout_above="@+id/ansBtn1"
        android:onClick="checkResult"
        android:text="2345" />
    
    <Button
        android:id="@+id/ansBtn1"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/ansBtn4"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="20dp"
        android:onClick="checkResult"
        android:text="2345" />
    
    <Button
        android:id="@+id/ansBtn2"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/ansBtn1"
        android:layout_alignBottom="@+id/ansBtn1"
        android:layout_alignParentLeft="true"
        android:onClick="checkResult"
        android:text="2345" />
    
    <Button
        android:id="@+id/ansBtn4"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/ansBtn3"
        android:layout_alignBottom="@+id/ansBtn3"
        android:layout_alignParentRight="true"
        android:onClick="checkResult"
        android:text="2345" />
    

  3. 您的布局在各种屏幕尺寸上会略有不同,因为对每种屏幕尺寸和屏幕密度设置不同的设计是不合逻辑的(可能)。我建议您通过Supporting Multiple Screens阅读。它清楚地解释了你如何做到这一点(它很长但值得一读)

答案 1 :(得分:0)

  1. 应该有一个布局。您可以将不同的布局用于其他目的,例如添加仅从特定API可用的功能,如果处于纵向或横向模式,则具有不同的布局等。

  2. 没有看到代码很难说。从理论上讲,它应该看起来很相似,是的。根据我的经验,Android版本对此类内容的影响要大于设备的大小。