Как изменить стиль отдельного вида внутри фрагмента - PullRequest
0 голосов
/ 13 июля 2020

Цель: Я пытаюсь применить две разные темы в одном фрагменте. Один для общего xml фрагмента, а другой для конкретного вида в пределах этого фрагмента xml.

Причина / проблема: Причина в том, что это не кажется возможным чтобы изменить весь фон плавающей кнопки действия на вектор с помощью MaterialComponents, но он работает с appCompat.

Первоначально я пытался изменить тему в xml, используя style = "..." как показано ниже, но похоже, что он возвращается к теме, объявленной в манифесте, которой является 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" >

С компонентами материала:

MaterialComponentsVersion

With AppCompat:

enter image description here

Manifest:

<?xml version="1.0" encoding="utf-8"?>
    

Таким образом, когда тема изменяется с AppCompat на компоненты материала, ресурс изображения больше не применяется должным образом к плавающей кнопке действия. Поэтому я просто хочу применить AppCompat для кнопки с плавающим действием, но оставлю компоненты материала в качестве основного стиля.

Ответы [ 3 ]

0 голосов
/ 13 июля 2020

Если вы хотите изменить тему кнопки, которая влияет на то, как она надувается, вы должны использовать android:theme вместо android:style.

0 голосов
/ 13 июля 2020

И Бен П., и Габриель были полуправильными. Ответ требовал как изменения темы через:

android:theme="@style/SecondTheme"

, так и установки оттенка на null:

app:tint="@null"

В данном случае требовались оба варианта

Все вместе , учитывая две темы, это правильный XML для FloatingActionButton, если вы хотите изменить весь фон на вектор, в то время как вашей основной темой является MaterialComponents, как указано в манифесте вашего приложения:

<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" />

Спасибо Габриель и Бену за вашу помощь!

0 голосов
/ 13 июля 2020

В вашем случае вы можете использовать:

<com.google.android.material.floatingactionbutton.FloatingActionButton
    app:tint="@null"
    app:srcCompat="@drawable/flag_united_states_of_america"
    ..>

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>
...