<include> 是否尊重不同的 api 级别,例如 /layout-v19/layout.xml 与 /layout/layout.xml?
Does <include> respect different api levels such as /layout-v19/layout.xml vs /layout/layout.xml?
我有一个布局,其中只有一部分是 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 上崩溃,但这是预料之中的)。
Does <include>
respect different api levels such as /layout-v19/layout.xml
vs /layout/layout.xml
?
是的,标签在运行时由 LayoutInflater
处理,引用的布局像资源中的任何其他布局一样加载。
我认为问题在于:
layout-v19
应用于 API 级别 19 及以上 除非有更具体的资源匹配
layout
是最不具体的,因此它仅适用于 API 低于 19 级的你
因此,如果您想要 API 20 及以上的其他布局,请将其放入 layout-v20
。
我有一个布局,其中只有一部分是 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 上崩溃,但这是预料之中的)。
Does
<include>
respect different api levels such as/layout-v19/layout.xml
vs/layout/layout.xml
?
是的,标签在运行时由 LayoutInflater
处理,引用的布局像资源中的任何其他布局一样加载。
我认为问题在于:
layout-v19
应用于 API 级别 19 及以上 除非有更具体的资源匹配layout
是最不具体的,因此它仅适用于 API 低于 19 级的你
因此,如果您想要 API 20 及以上的其他布局,请将其放入 layout-v20
。