web-dev-qa-db-ja.com

テーマアプリのSnackBarのスタイル

私は助けが必要です。スタイルアプリでスナックバーのテキストのデザインを変更するにはどうすればよいですか?コードの変更には興味がありません。次のコードを見つけました。しかし、それは私のために働いていません。何故ですか?私のテーマは@ style/Theme.AppCompat.Light.DarkActionBarから派生しています。

<style name="TextAppearance.Design.Snackbar.Message" parent="Android:TextAppearance">
        <item name="Android:textSize">10sp</item>
        <item name="Android:textColor">#FEFEFE</item>
    </style>
    <style name="TextAppearance.Design.Snackbar.Action" parent="Android:TextAppearance">
        <item name="Android:textSize">16sp</item>
        <item name="Android:textColor">#FEFEFE</item>
    </style>

あなたはこれを必要とします: tools:override="true"

<resources xmlns:tools="http://schemas.Android.com/tools">
    <style name="TextAppearance.Design.Snackbar.Message" parent="Android:TextAppearance" tools:override="true">
        <item name="Android:textColor">@color/text</item>
        <item name="Android:textSize">50sp</item>
    </style>
</resources>
18
Amos

Material Components Library を使用すると、アプリテーマのスナックバースタイルをglobally変更できます。

<style name="AppTheme" parent="Theme.MaterialComponents.*">
     <!-- Style to use for Snackbars in this theme. -->
    <item name="snackbarStyle">@style/Widget.MaterialComponents.Snackbar</item>
    <!-- Style to use for action button within a Snackbar in this theme. -->
    <item name="snackbarButtonStyle">@style/Widget.MaterialComponents.Button.TextButton.Snackbar</item>
    <!-- Style to use for message text within a Snackbar in this theme. -->
    <item name="snackbarTextViewStyle">@style/Widget.MaterialComponents.Snackbar.TextView</item>
    ....
</style>

注:snackbarStyleおよびsnackbarButtonStyleにはバージョン1.1.0が必要です。snackbarTextViewStyleにはバージョン1.2.0が必要です。

例えば:

  <style name="snackbar_style" parent="@style/Widget.MaterialComponents.Snackbar">
    <item name="Android:layout_margin">32dp</item>
  </style>

  <style name="snackbar_button" parent="@style/Widget.MaterialComponents.Button">
      <item name="backgroundTint">@color/secondaryLightColor</item>
      <item name="Android:textColor">@color/primaryDarkColor</item>
  </style>

  <style name="snackbar_text" parent="@style/Widget.MaterialComponents.Snackbar.TextView">
    <item name="Android:textColor">@color/secondaryLightColor</item>
  </style>

enter image description here

15

2018新しい方法:

https://materialdoc.com/components/snackbars-and-toasts/#with-code

//インスタンスを作成します

Snackbar snackbar = Snackbar.make(view, text, duration);

//アクションボタンの色を設定します

snackbar.setActionTextColor(getResources().getColor(R.color.Indigo));

//スナックバービューを取得します

View snackbarView = snackbar.getView();

//スナックバーのテキストの色を変更します

int snackbarTextId = Android.support.design.R.id.snackbar_text;
TextView textView = (TextView)snackbarView.findViewById(snackbarTextId);
textView.setTextColor(getResources().getColor(R.color.Indigo));

//スナックバーの背景を変更します

snackbarView.setBackgroundColor(Color.Magenta);

Snackbarのソースを詳しく調べたところ、Snackbarの背景は、ベースとオーバーレイの2つのレイヤーで構成されており、色が混ざっています。

これらの色を指定するには、テーマ2のパラメーターに追加するだけです。

colorSurface-背景色、デフォルト= 0xFFFFFFFF

colorOnSurface-オーバーレイ、デフォルト= 0xFF000000

したがって、デフォルトのケースでは、デフォルトで0.8アルファが適用され、取得される色は0xFF333333で、白と黒の中間にあります。

スナックバーを混ぜてスタイリングして楽しんでください:)

0
Arthur Matsegor