diff --git a/lib/java/com/google/android/material/chip/Chip.java b/lib/java/com/google/android/material/chip/Chip.java
index 5178ec8b3..e42441d2c 100644
--- a/lib/java/com/google/android/material/chip/Chip.java
+++ b/lib/java/com/google/android/material/chip/Chip.java
@@ -277,10 +277,6 @@ public class Chip extends AppCompatCheckBox implements Delegate, Shapeable {
}
}
- private boolean shouldEnsureMinTouchTargetSize() {
- return ensureMinTouchTargetSize;
- }
-
private void initMinTouchTarget(Context context, AttributeSet attrs, int defStyleAttr) {
if (attrs == null) {
return;
@@ -2257,7 +2253,7 @@ public class Chip extends AppCompatCheckBox implements Delegate, Shapeable {
* @see #setEnsureMinTouchTargetSize(boolean)
* @attr ref com.google.android.material.R.styleable#Chip_ensureMinTouchTargetSize
*/
- public boolean getEnsureMinTouchTargetSize() {
+ public boolean shouldEnsureMinTouchTargetSize() {
return ensureMinTouchTargetSize;
}
diff --git a/lib/java/com/google/android/material/chip/res/values/attrs.xml b/lib/java/com/google/android/material/chip/res/values/attrs.xml
index db8694daf..3c2fde467 100644
--- a/lib/java/com/google/android/material/chip/res/values/attrs.xml
+++ b/lib/java/com/google/android/material/chip/res/values/attrs.xml
@@ -41,7 +41,7 @@
-
+
diff --git a/lib/java/com/google/android/material/floatingactionbutton/FloatingActionButton.java b/lib/java/com/google/android/material/floatingactionbutton/FloatingActionButton.java
index ef6c4dbce..5019db49f 100644
--- a/lib/java/com/google/android/material/floatingactionbutton/FloatingActionButton.java
+++ b/lib/java/com/google/android/material/floatingactionbutton/FloatingActionButton.java
@@ -236,6 +236,9 @@ public class FloatingActionButton extends VisibilityAwareImageButton
new ShapeAppearanceModel(context, attrs, defStyleAttr, DEF_STYLE_RES, -1);
boolean usingDefaultCorner = isUsingDefaultCorner(shapeAppearance);
+ boolean ensureMinTouchTargetSize = a
+ .getBoolean(R.styleable.FloatingActionButton_ensureMinTouchTargetSize, false);
+
a.recycle();
imageHelper = new AppCompatImageHelper(this);
@@ -252,6 +255,7 @@ public class FloatingActionButton extends VisibilityAwareImageButton
getImpl().setMaxImageSize(maxImageSize);
getImpl().setShowMotionSpec(showMotionSpec);
getImpl().setHideMotionSpec(hideMotionSpec);
+ getImpl().setEnsureMinTouchTargetSize(ensureMinTouchTargetSize);
setScaleType(ScaleType.MATRIX);
}
@@ -514,6 +518,31 @@ public class FloatingActionButton extends VisibilityAwareImageButton
return checkNotNull(getImpl().getShapeAppearance());
}
+ /**
+ * Returns whether this fab will expand its bounds (if needed) to meet the minimum touch target
+ * size.
+ *
+ * @see #setEnsureMinTouchTargetSize(boolean)
+ * @attr ref com.google.android.material.R.styleable#FloatingActionButton_ensureMinTouchTargetSize
+ */
+ public boolean shouldEnsureMinTouchTargetSize() {
+ return getImpl().getEnsureMinTouchTargetSize();
+ }
+
+ /**
+ * Sets whether this FloatingActionButton should expand its bounds (if needed) to meet the minimum
+ * touch target size.
+ *
+ * @attr ref com.google.android.material.R.styleable#FloatingActionButton_ensureMinTouchTargetSize
+ */
+ public void setEnsureMinTouchTargetSize(boolean flag) {
+ if (flag != getImpl().getEnsureMinTouchTargetSize()) {
+ getImpl().setEnsureMinTouchTargetSize(flag);
+ requestLayout();
+ }
+ }
+
+
@Override
public void setVisibility(int visibility) {
super.setVisibility(visibility);
diff --git a/lib/java/com/google/android/material/floatingactionbutton/FloatingActionButtonImpl.java b/lib/java/com/google/android/material/floatingactionbutton/FloatingActionButtonImpl.java
index 59deeff0e..b0ba47a27 100644
--- a/lib/java/com/google/android/material/floatingactionbutton/FloatingActionButtonImpl.java
+++ b/lib/java/com/google/android/material/floatingactionbutton/FloatingActionButtonImpl.java
@@ -83,6 +83,7 @@ class FloatingActionButtonImpl {
@Nullable Drawable contentBackground;
boolean usingDefaultCorner;
+ boolean ensureMinTouchTargetSize;
float elevation;
float hoveredFocusedTranslationZ;
float pressedTranslationZ;
@@ -341,8 +342,16 @@ class FloatingActionButtonImpl {
hideMotionSpec = spec;
}
- final boolean isAccessible() {
- return view.getSizeDimension() >= minTouchTargetSize;
+ final boolean shouldExpandBoundsForA11y() {
+ return !ensureMinTouchTargetSize || view.getSizeDimension() >= minTouchTargetSize;
+ }
+
+ boolean getEnsureMinTouchTargetSize() {
+ return ensureMinTouchTargetSize;
+ }
+
+ void setEnsureMinTouchTargetSize(boolean flag) {
+ ensureMinTouchTargetSize = flag;
}
void onElevationsChanged(
@@ -641,7 +650,10 @@ class FloatingActionButtonImpl {
}
void getPadding(Rect rect) {
- final int minPadding = (minTouchTargetSize - view.getSizeDimension()) / 2;
+ final int minPadding = ensureMinTouchTargetSize
+ ? (minTouchTargetSize - view.getSizeDimension()) / 2
+ : 0;
+
final float maxShadowSize = (getElevation() + pressedTranslationZ);
final int hPadding = Math.max(minPadding, (int) Math.ceil(maxShadowSize));
final int vPadding = Math.max(minPadding, (int) Math.ceil(maxShadowSize * SHADOW_MULTIPLIER));
diff --git a/lib/java/com/google/android/material/floatingactionbutton/FloatingActionButtonImplLollipop.java b/lib/java/com/google/android/material/floatingactionbutton/FloatingActionButtonImplLollipop.java
index 65ac91870..a2387bd9d 100644
--- a/lib/java/com/google/android/material/floatingactionbutton/FloatingActionButtonImplLollipop.java
+++ b/lib/java/com/google/android/material/floatingactionbutton/FloatingActionButtonImplLollipop.java
@@ -173,7 +173,7 @@ class FloatingActionButtonImplLollipop extends FloatingActionButtonImpl {
@Override
boolean shouldAddPadding() {
- return shadowViewDelegate.isCompatPaddingEnabled() || !isAccessible();
+ return shadowViewDelegate.isCompatPaddingEnabled() || !shouldExpandBoundsForA11y();
}
@Override
@@ -236,7 +236,7 @@ class FloatingActionButtonImplLollipop extends FloatingActionButtonImpl {
void getPadding(Rect rect) {
if (shadowViewDelegate.isCompatPaddingEnabled()) {
super.getPadding(rect);
- } else if (!isAccessible()) {
+ } else if (!shouldExpandBoundsForA11y()) {
int minPadding = (minTouchTargetSize - view.getSizeDimension()) / 2;
rect.set(minPadding, minPadding, minPadding, minPadding);
} else {
diff --git a/lib/java/com/google/android/material/floatingactionbutton/res/values/attrs.xml b/lib/java/com/google/android/material/floatingactionbutton/res/values/attrs.xml
index 25e69ce09..7897fad54 100644
--- a/lib/java/com/google/android/material/floatingactionbutton/res/values/attrs.xml
+++ b/lib/java/com/google/android/material/floatingactionbutton/res/values/attrs.xml
@@ -36,6 +36,9 @@
+
+
diff --git a/lib/java/com/google/android/material/floatingactionbutton/res/values/styles.xml b/lib/java/com/google/android/material/floatingactionbutton/res/values/styles.xml
index 23b653cb7..4e9503d47 100644
--- a/lib/java/com/google/android/material/floatingactionbutton/res/values/styles.xml
+++ b/lib/java/com/google/android/material/floatingactionbutton/res/values/styles.xml
@@ -35,6 +35,7 @@