如何更改片段中单个视图的样式
How to change the style of a single view within a fragment
目标: 我试图在一个片段中应用两个不同的主题。一个用于片段的总体 xml,另一个用于该片段的 xml.
中的特定视图
Reason/Problem: 原因是使用 [=49 似乎无法将浮动操作按钮的整个背景更改为矢量=]组件,但它确实适用于 appCompat。
最初,我尝试使用 style="..." 更改 xml 中的主题,如下所示,但它似乎恢复到清单中声明的主题,即 AppTheme1。我知道这一点,因为我通过切换在那里声明的主题来测试它。也就是说,当我将它切换到 AppTheme2 时,向量在 FAB 中正确加载,但它在其他地方崩溃了,因为我在整个应用程序中都有 Material 组件。
解决方案: 我认为最明显的解决方案是仅更改相关浮动操作按钮的主题,但我不知道该怎么做。非常感谢任何帮助。谢谢!
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/nationality"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_margin="10dp"
android:scaleType="fitXY"
app:srcCompat="@drawable/flag_united_states_of_america"
app:borderWidth="0dp"
style="@style/AppTheme2"
app:maxImageSize="56dp" />
主题:
<style name="AppTheme1" parent="Theme.MaterialComponents.Light.NoActionBar" >
&&
<style name="AppTheme2" parent="Theme.AppCompat.Light.NoActionBar" >
具有 Material 个组件:
使用 AppCompat:
清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fabtest">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
因此,当主题从 AppCompat 更改为 Material Components 时,图像资源不再正确应用于 Floating Action Button。所以我只想为浮动操作按钮应用 AppCompat,但保留 Material 组件作为主要样式。
在你的情况下你可以使用:
<com.google.android.material.floatingactionbutton.FloatingActionButton
app:tint="@null"
app:srcCompat="@drawable/flag_united_states_of_america"
..>
Material 组件中的 FloatingActionButton
使用应用主题中定义的 colorOnSecondary
属性为其图标着色(默认值为 #000000
)。如果你不想给图标着色,你必须使用 app:tint="@null"
.
一般来说,如果您想在 FAB 中使用自定义样式,您可以使用:
<com.google.android.material.floatingactionbutton.FloatingActionButton
style="@style/MyCustomFab"
..>
与:
<style name="MyCustomFab" parent="@style/Widget.MaterialComponents.FloatingActionButton>
.....
<item name="backgroundTint">@color/....</item>
<item name="tint">@color/....</item>
</style>
如果您想覆盖您的应用主题中定义的属性,您可以使用:
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:theme="@style/fab_themeoverlay"
..>
与:
<style name="fab_themeoverlay" parent="@style/Widget.MaterialComponents.FloatingActionButton>
<item name="colorPrimary">@color/...</item>
</style>
如果你想改变按钮的主题,这会影响它的膨胀方式,你应该使用 android:theme
而不是 android:style
。
Ben P. 和 Gabrielle 都半正确。答案需要通过以下方式更改主题:
android:theme="@style/SecondTheme"
并将色调设置为空:
app:tint="@null"
在这种情况下两者都是必需的
总而言之,给定两个主题,如果您想将 FloatingActionButton 的整个背景更改为矢量,而您的主要主题是应用程序清单中引用的 MaterialComponents,那么这是 FloatingActionButton 的正确 XML:
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
app:borderWidth="0dp"
app:srcCompat="@drawable/your_vector"
app:tint="@null"
android:theme="@style/SecondTheme"
app:maxImageSize="56dp" />
感谢 Gabrielle 和 Ben 的帮助!
目标: 我试图在一个片段中应用两个不同的主题。一个用于片段的总体 xml,另一个用于该片段的 xml.
中的特定视图Reason/Problem: 原因是使用 [=49 似乎无法将浮动操作按钮的整个背景更改为矢量=]组件,但它确实适用于 appCompat。
最初,我尝试使用 style="..." 更改 xml 中的主题,如下所示,但它似乎恢复到清单中声明的主题,即 AppTheme1。我知道这一点,因为我通过切换在那里声明的主题来测试它。也就是说,当我将它切换到 AppTheme2 时,向量在 FAB 中正确加载,但它在其他地方崩溃了,因为我在整个应用程序中都有 Material 组件。
解决方案: 我认为最明显的解决方案是仅更改相关浮动操作按钮的主题,但我不知道该怎么做。非常感谢任何帮助。谢谢!
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/nationality"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_margin="10dp"
android:scaleType="fitXY"
app:srcCompat="@drawable/flag_united_states_of_america"
app:borderWidth="0dp"
style="@style/AppTheme2"
app:maxImageSize="56dp" />
主题:
<style name="AppTheme1" parent="Theme.MaterialComponents.Light.NoActionBar" >
&&
<style name="AppTheme2" parent="Theme.AppCompat.Light.NoActionBar" >
具有 Material 个组件:
使用 AppCompat:
清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.fabtest">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
因此,当主题从 AppCompat 更改为 Material Components 时,图像资源不再正确应用于 Floating Action Button。所以我只想为浮动操作按钮应用 AppCompat,但保留 Material 组件作为主要样式。
在你的情况下你可以使用:
<com.google.android.material.floatingactionbutton.FloatingActionButton
app:tint="@null"
app:srcCompat="@drawable/flag_united_states_of_america"
..>
Material 组件中的 FloatingActionButton
使用应用主题中定义的 colorOnSecondary
属性为其图标着色(默认值为 #000000
)。如果你不想给图标着色,你必须使用 app:tint="@null"
.
一般来说,如果您想在 FAB 中使用自定义样式,您可以使用:
<com.google.android.material.floatingactionbutton.FloatingActionButton
style="@style/MyCustomFab"
..>
与:
<style name="MyCustomFab" parent="@style/Widget.MaterialComponents.FloatingActionButton>
.....
<item name="backgroundTint">@color/....</item>
<item name="tint">@color/....</item>
</style>
如果您想覆盖您的应用主题中定义的属性,您可以使用:
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:theme="@style/fab_themeoverlay"
..>
与:
<style name="fab_themeoverlay" parent="@style/Widget.MaterialComponents.FloatingActionButton>
<item name="colorPrimary">@color/...</item>
</style>
如果你想改变按钮的主题,这会影响它的膨胀方式,你应该使用 android:theme
而不是 android:style
。
Ben P. 和 Gabrielle 都半正确。答案需要通过以下方式更改主题:
android:theme="@style/SecondTheme"
并将色调设置为空:
app:tint="@null"
在这种情况下两者都是必需的
总而言之,给定两个主题,如果您想将 FloatingActionButton 的整个背景更改为矢量,而您的主要主题是应用程序清单中引用的 MaterialComponents,那么这是 FloatingActionButton 的正确 XML:
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
app:borderWidth="0dp"
app:srcCompat="@drawable/your_vector"
app:tint="@null"
android:theme="@style/SecondTheme"
app:maxImageSize="56dp" />
感谢 Gabrielle 和 Ben 的帮助!