From cf006c5e10e8cfa0f33f8d4ffa654c5136d14bdc Mon Sep 17 00:00:00 2001 From: pekingme <8545955+pekingme@users.noreply.github.com> Date: Thu, 6 Apr 2023 23:33:46 +0000 Subject: [PATCH] [Search] Made SearchBar and SearchView's container colors configurable in XML style. PiperOrigin-RevId: 522468493 --- docs/components/Search.md | 2 ++ .../com/google/android/material/search/SearchBar.java | 5 +++-- .../com/google/android/material/search/SearchView.java | 9 ++++++--- .../google/android/material/search/res/values/attrs.xml | 4 ++++ .../google/android/material/search/res/values/styles.xml | 2 ++ 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/docs/components/Search.md b/docs/components/Search.md index 11bd024f645..e6bba4b5f22 100644 --- a/docs/components/Search.md +++ b/docs/components/Search.md @@ -92,6 +92,7 @@ Element | Attribute | Related method(s) **Search text appearance** | `android:textAppearance` | `setTextAppearance`
`getTextAppearance` | `@style/TextAppearance.Material3.SearchBar` **Search text** | `android:text` | `setText`
`getText` | `null` **Search hint** | `android:hint` | `setHint`
`getHint` | `null` +**Color** | `app:backgroundTint` | -- | `?attr/colorSurface` **Flag for default margins** | `app:defaultMarginsEnabled` | -- | `true` **Flag for navigation icon** | `app:hideNavigationIcon` | -- | `false` @@ -209,6 +210,7 @@ Element | Attribute | Related meth **Search text appearance** | `android:textAppearance` | `setTextAppearance`
`getTextAppearance` | `@style/TextAppearance.Material3.SearchBar` **Search text** | `android:text` | `setText`
`getText` | `null` **Search hint** | `android:hint` | `setHint`
`getHint` | `null` +**Color** | `app:backgroundTint` | -- | `?attr/colorSurface` **Flag for navigation icon** | `app:hideNavigationIcon` | -- | `true` **Flag for `DrawerArrowDrawable`** | `app:useDrawerArrowDrawable` | -- | `false` **Flag for soft keyboard** | `app:autoShowKeyboard` | -- | `true` diff --git a/lib/java/com/google/android/material/search/SearchBar.java b/lib/java/com/google/android/material/search/SearchBar.java index 829bcb97fed..5b7dcbb8910 100644 --- a/lib/java/com/google/android/material/search/SearchBar.java +++ b/lib/java/com/google/android/material/search/SearchBar.java @@ -172,6 +172,7 @@ public SearchBar(@NonNull Context context, @Nullable AttributeSet attrs, int def ShapeAppearanceModel shapeAppearanceModel = ShapeAppearanceModel.builder(context, attrs, defStyleAttr, DEF_STYLE_RES).build(); + int backgroundColor = a.getColor(R.styleable.SearchBar_backgroundTint, 0); float elevation = a.getDimension(R.styleable.SearchBar_elevation, 0); defaultMarginsEnabled = a.getBoolean(R.styleable.SearchBar_defaultMarginsEnabled, true); defaultScrollFlagsEnabled = a.getBoolean(R.styleable.SearchBar_defaultScrollFlagsEnabled, true); @@ -203,7 +204,7 @@ public SearchBar(@NonNull Context context, @Nullable AttributeSet attrs, int def ViewCompat.setElevation(this, elevation); initTextView(textAppearanceResId, text, hint); - initBackground(shapeAppearanceModel, elevation, strokeWidth, strokeColor); + initBackground(shapeAppearanceModel, backgroundColor, elevation, strokeWidth, strokeColor); accessibilityManager = (AccessibilityManager) getContext().getSystemService(Context.ACCESSIBILITY_SERVICE); @@ -275,6 +276,7 @@ private void initTextView(@StyleRes int textAppearanceResId, String text, String private void initBackground( ShapeAppearanceModel shapeAppearance, + @ColorInt int backgroundColor, float elevation, float strokeWidth, @ColorInt int strokeColor) { @@ -285,7 +287,6 @@ private void initBackground( backgroundShape.setStroke(strokeWidth, strokeColor); } - int backgroundColor = MaterialColors.getColor(this, R.attr.colorSurface); int rippleColor = MaterialColors.getColor(this, R.attr.colorControlHighlight); Drawable background; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { diff --git a/lib/java/com/google/android/material/search/SearchView.java b/lib/java/com/google/android/material/search/SearchView.java index 8eb7b2b3e17..f20cbbd1086 100644 --- a/lib/java/com/google/android/material/search/SearchView.java +++ b/lib/java/com/google/android/material/search/SearchView.java @@ -49,6 +49,7 @@ import android.widget.ImageButton; import android.widget.TextView; import android.window.BackEvent; +import androidx.annotation.ColorInt; import androidx.annotation.DrawableRes; import androidx.annotation.MenuRes; import androidx.annotation.NonNull; @@ -157,6 +158,7 @@ public class SearchView extends FrameLayout implements CoordinatorLayout.Attache private boolean animatedNavigationIcon; private boolean animatedMenuItems; private boolean autoShowKeyboard; + @ColorInt private final int backgroundColor; private boolean useWindowInsetsController; private boolean statusBarSpacerEnabledOverride; @NonNull private TransitionState currentTransitionState = TransitionState.HIDDEN; @@ -179,6 +181,7 @@ public SearchView(@NonNull Context context, @Nullable AttributeSet attrs, int de ThemeEnforcement.obtainStyledAttributes( context, attrs, R.styleable.SearchView, defStyleAttr, DEF_STYLE_RES); + backgroundColor = a.getColor(R.styleable.SearchView_backgroundTint, 0); int headerLayoutResId = a.getResourceId(R.styleable.SearchView_headerLayout, -1); int textAppearanceResId = a.getResourceId(R.styleable.SearchView_android_textAppearance, -1); String text = a.getString(R.styleable.SearchView_android_text); @@ -330,9 +333,9 @@ private void setUpBackgroundViewElevationOverlay(float elevation) { if (elevationOverlayProvider == null || backgroundView == null) { return; } - int backgroundColor = - elevationOverlayProvider.compositeOverlayWithThemeSurfaceColorIfNeeded(elevation); - backgroundView.setBackgroundColor(backgroundColor); + int backgroundColorWithOverlay = + elevationOverlayProvider.compositeOverlayIfNeeded(backgroundColor, elevation); + backgroundView.setBackgroundColor(backgroundColorWithOverlay); } private float getOverlayElevation() { diff --git a/lib/java/com/google/android/material/search/res/values/attrs.xml b/lib/java/com/google/android/material/search/res/values/attrs.xml index bd3941ff677..328d5126860 100644 --- a/lib/java/com/google/android/material/search/res/values/attrs.xml +++ b/lib/java/com/google/android/material/search/res/values/attrs.xml @@ -36,6 +36,8 @@ + + + +