目标:我试图在一个片段中应用两个不同的主题。一个用于片段的整体xml,另一个用于片段xml中的特定视图。
原因/问题:这是因为似乎不可能使用MaterialComponents将浮动操作按钮的整个背景更改为向量,但它确实适用于appCompat。
最初,我试图使用style="..."更改xml中的主题,如下所示,但它似乎正在恢复到清单中声明的主题AppTheme1。我知道这一点,因为我通过切换在那里声明的主题来测试它。也就是说,当我将其切换到AppTheme2时,向量在FAB中正确加载,但它在其他地方崩溃,因为我在整个应用程序中都有MaterialComponents。
解决方案:我认为最明显的解决方案是改变主题,只改变有问题的浮动动作按钮,但我不知道怎么做。非常感谢您的帮助。非常感谢。
<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" >
使用MaterialComponents:
使用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时,图像资源不再正确应用于浮动操作按钮。所以我只想将AppCompat应用于浮动动作按钮,但保留材质组件作为主要样式。
Ben P.和加布里埃尔都是半正确的。答案需要通过以下方式改变主题:
android:theme="@style/SecondTheme"
并将色调设置为空:
app:tint="@null"
在这种情况下,两者都是必需的
总的来说,给定两个主题,如果您想将整个背景更改为向量,而主主题是应用程序清单中引用的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" />
感谢加布里埃尔和本的帮助!
如果你想改变按钮的主题,这会影响按钮的膨胀方式,你应该使用android:theme
,而不是android:style
。
在您的情况下,您可以使用:
<com.google.android.material.floatingactionbutton.FloatingActionButton
app:tint="@null"
app:srcCompat="@drawable/flag_united_states_of_america"
..>
Material Components中的FloatingActionButton
使用应用程序主题中定义的colorOnSecondary
属性为其图标着色(默认值为#000000
)。如果你不想给图标着色,你必须使用app:tint=“@null”
。
一般来说,如果您想在工厂中使用自定义样式,可以使用:
<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>
我有一个包含例如一个按钮的片段,我想允许包含该片段的活动更改此按钮视图,例如颜色和标题或src图像。最好的方法是什么? 更新:如果我不够清楚,很抱歉,但我希望活动可以随心所欲地更改整个视图,比如设置填充、颜色或任何东西。它将以编程方式创建视图,片段应该用新视图替换旧视图,并更改视图的ID,以便片段代码不受影响。如果我在片段中创建了获取这些视图的方法,那么主活动应该在什么时候调用它们?因为活动必须等
我需要将数组中的值替换为。尝试此操作时,仅显示阵列中的第一条记录。 如何显示数组中的所有条目?
如何在成功提交数据时将数据从本地数据库刷新到RecyclerView?我使用应用程序上的选项卡。函数提交数据,如果成功,数据将存储在中。 关于的数据将在中显示。但是发生的情况是,我必须滑动,然后滑动到,然后滑动到我的上成功显示的新的数据。 主要活动: 一切都很顺利,只是希望表单提交的时候数据能显示出来,可以直接在第3页签上查看
问题内容: 我想打开jpeg图像文件,对其进行编码,更改一些像素颜色,然后将其保存回原样。 我想做这样的事情 我只是想不出一个可行的解决方案,因为编码图像文件后获得的默认图像类型没有Set方法。 谁能解释该怎么做?非常感谢。 问题答案: 成功解码后(以及特定的解码功能,如),返回的值。是一个接口,用于定义图像的只读视图:它不提供更改/绘制图像的方法。 该软件包提供了几种实现方式,这些实现方式通常允
我找不到如何从< code>Activity更改fragment的< code>textview。我有4个文件: frag_class.xml有textView,我想更改MainActivity.java的文本。FragmentClass扩展了片段,此片段显示在MainActivity中,FragmentClass具有: 在MainActivity中,我尝试了这个: 但可悲的是,这段代码给了我Nu
我有一个显示列表的导航抽屉和一个显示内容的视页。当单击导航抽屉上列表中的特定项目时,将为所有页面生成一个URL,该URL将导致视图分页程序内容的更改。导航抽屉和查看页处于相同的活动中。view pager中的片段具有从服务器检索内容的URL。我怎样才能找到它? 下面是一些代码: 查看页有三页。适配器如下: 这些页面都有一个URL字段,用于从包含数据的服务器中提取json。所以简而言之,问题是当导航