<include>是否尊重不同的api级别,例如/layout-v19/layout.xml与/layout/layout.xml?

时间:2019-01-30 19:14:15

标签: android android-layout android-api-levels

我有一种布局,其中只有一部分是api级别依赖的(它使用矢量),并且我需要以不同的方式处理api-19。我更改了布局以使用app:srcCompat:"@drawable/left_arrow_vector"来处理布局,该布局可以使19不会崩溃,但是当我在其他api级别上对其进行测试时,它仍显示与api-19相同的布局(存在尺寸调整问题,很容易看到。当我弄清楚这部分时,我会修复它。

res / layout-v19:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@id/calTitleBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:orientation="horizontal">

    <ImageView
        android:id="@id/prevMonth"
        app:srcCompat="@drawable/left_arrow_vector"
        android:contentDescription="@string/prev_month"
        android:layout_height="24dp"
        android:layout_width="24dp" />

    <TextView
        android:id="@id/calMonth"
        style="@style/CalendarTitle"
        android:layout_toStartOf="@id/nextMonth"
        android:layout_toEndOf="@id/prevMonth"
        tools:text="JANUARY 2019" />

    <ImageView
        android:id="@id/nextMonth"
        android:layout_alignParentRight="true"
        app:srcCompat="@drawable/right_arrow_vector"
        android:contentDescription="@string/next_month"
        android:layout_height="24dp"
        android:layout_width="24dp" />

</RelativeLayout>

res / layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@id/calTitleBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_alignParentTop="true"
    android:orientation="horizontal">

    <ImageButton
        android:id="@id/prevMonth"
        style="@style/CalendarLeftArrowButton"
        android:contentDescription="@string/prev_month" />

    <TextView
        android:id="@id/calMonth"
        style="@style/CalendarTitle"
        android:layout_toStartOf="@id/nextMonth"
        android:layout_toEndOf="@id/prevMonth"
        tools:text="JANUARY 2019" />

    <ImageButton
        android:id="@id/nextMonth"
        style="@style/CalendarRightArrowButton"
        android:contentDescription="@string/next_month" />
</RelativeLayout>

styles.xml的相关部分:

    <style name="CalendarArrowButtons">
        <item name="android:layout_width">44dp</item>
        <item name="android:layout_height">44dp</item>
    </style>

    <style name="CalendarLeftArrowButton" parent="CalendarArrowButtons">
        <item name="android:layout_alignParentLeft">true</item>
        <item name="android:background">@drawable/left_arrow_vector</item>
    </style>

    <style name="CalendarRightArrowButton" parent="CalendarArrowButtons">
        <item name="android:layout_alignParentRight">true</item>
        <item name="android:background">@drawable/right_arrow_vector</item>
    </style>

当我删除include并直接使用其中一个时,它在各个版本上显示正确(嗯,正常布局会在19崩溃,但这是可以预期的)。

1 个答案:

答案 0 :(得分:0)

  

<include>是否尊重/layout-v19/layout.xml/layout/layout.xml之类的不同api级别?

是的,标签在运行时由LayoutInflater处理,并且所引用的布局像资源中的任何其他布局一样被加载。

我认为问题在于:

  • layout-v19应用于API级别19 及更高版本,除非有更具体的资源匹配项
  • layout是最不具体的,因此仅适用于19级以下的API级别

因此,如果您想要API 20及更高版本的其他布局,请将其放在layout-v20中。