Android会根据API版本夸大错误的布局

时间:2015-10-21 11:45:56

标签: android android-layout

我有2个布局文件,一个是默认布局,另一个是API 14及更高版本。 Android似乎正在夸大默认布局。我正在使用5.1.0 API 22上的手机进行测试。

布局-V14 \ list_settings_header.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="72dp"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/checkbox"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/linearLayout">

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_toLeftOf="@+id/switch1"
            android:paddingLeft="16dp"
            android:paddingStart="16dp"
            android:text="Email Notifications"
            android:textSize="16sp"
            android:textColor="@color/black_87"/>

        <TextView
            android:id="@+id/email"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignEnd="@+id/title"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignRight="@+id/title"
            android:layout_below="@+id/title"
            android:paddingLeft="16dp"
            android:paddingStart="16dp"
            android:textSize="14sp"
            android:textColor="@color/black_54"/>
    </LinearLayout>

    <Switch
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_centerVertical="true"/>


</RelativeLayout>

布局\ list_settings_header.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="72dp"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/checkbox"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/linearLayout">

        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_toLeftOf="@+id/switch1"
            android:paddingLeft="16dp"
            android:paddingStart="16dp"
            android:text="Email Notifications"
            android:textSize="16sp"
            android:textColor="@color/black_87"/>

        <TextView
            android:id="@+id/email"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignEnd="@+id/title"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignRight="@+id/title"
            android:layout_below="@+id/title"
            android:paddingLeft="16dp"
            android:paddingStart="16dp"
            android:textSize="14sp"
            android:textColor="@color/black_54"/>
    </LinearLayout>

    <CheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_centerVertical="true"/>

</RelativeLayout>

两种布局之间的唯一区别是复选框和开关。我在5.1.0手机上看到了复选框。

我将布局膨胀为列表视图的标题:

 View view = inflater.inflate(R.layout.fragment_settings, container, false);
        ListView listView = (ListView) view.findViewById(R.id.listView);
        View header = inflater.inflate(R.layout.list_settings_header, listView, false);

2 个答案:

答案 0 :(得分:0)

您可能希望在代码中手动检查版本。

你可以这样做:

int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if(currentapiVersion > 14){
    //inflate layout
} else {
    //inflate other layout
}

答案 1 :(得分:0)

您的布局定义完全正确。 我真的认为你正在寻找一个不存在的问题:尝试添加一个额外的View(如TextView),文本如“这就是布局V-14”< / em>在 layout-v14 / list_settings_header.xml 中,检查它是否出现在5.1.0设备上。