我有一种布局,其中只有一部分是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崩溃,但这是可以预期的)。
答案 0 :(得分:0)
<include>
是否尊重/layout-v19/layout.xml
与/layout/layout.xml
之类的不同api级别?
是的,标签在运行时由LayoutInflater
处理,并且所引用的布局像资源中的任何其他布局一样被加载。
我认为问题在于:
layout-v19
应用于API级别19 及更高版本,除非有更具体的资源匹配项layout
是最不具体的,因此仅适用于19级以下的API级别因此,如果您想要API 20及更高版本的其他布局,请将其放在layout-v20
中。