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 @@
+
+
+
+