android-studio - 如何自定义材料图标按钮填充?
问题描述
我的情景
我想使用带有固定图标(矢量可绘制)的材质图标按钮 _ 表示没有填充。我使用了谷歌材料:
implementation 'com.google.android.material:material:1.0.0'
这是我的布局
<com.google.android.material.button.MaterialButton
android:id="@+id/btnLinkin"
style="@style/AppIconButton"
app:icon="@drawable/ic_linkedin"
app:iconTintMode="screen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
app:layout_constraintEnd_toStartOf="@+id/btnGoogle"
android:layout_marginRight="8dp"
app:layout_constraintStart_toEndOf="@+id/btnFacebook"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toTopOf="@+id/tvHave"/>
这是我的风格
<style name="AppIconButton" parent="Widget.MaterialComponents.Button.OutlinedButton.Icon">
<item name="rippleColor">@color/colorSecondary</item>
<item name="strokeColor">@android:color/transparent</item>
<item name="iconTint">@android:color/transparent</item>
<item name="android:gravity">center</item>
这是材料组件的风格
<style name="Widget.MaterialComponents.Button.OutlinedButton.Icon">
<item name="android:paddingLeft">@dimen/mtrl_btn_icon_btn_padding_left</item>
<item name="android:paddingRight">@dimen/mtrl_btn_icon_btn_padding_left</item>
</style>
这是材料组件的尺寸
<dimen name="mtrl_btn_icon_padding">0dp</dimen>
<dimen name="mtrl_btn_icon_btn_padding">0dp</dimen>
<dimen name="mtrl_btn_icon_btn_padding_left">0dp</dimen>
但这些不能让我成为我真正想要的。结果是没有左侧填充的 Material Icon Button,但右侧默认填充 (14dp) 如下:
请保存我的时间或指南以了解我如何才能真正理解这些概念。
解决方案
您可以尝试使用 app:iconPadding="0dp" ,例如:
<com.google.android.material.button.MaterialButton
android:id="@+id/button"
style="@style/Widget.MaterialComponents.Button.Icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:icon="@drawable/your_icon"
app:iconTint="@null"
app:backgroundTintMode="src_over"
app:cornerRadius="14dp"
app:iconPadding="0dp"
android:paddingStart="24dp"
android:paddingTop="5dp"
android:paddingEnd="24dp"
android:paddingBottom="5dp"
app:backgroundTint="@color/button_background_color"
android:theme="@style/Theme.MaterialComponents.Light"/>
结果:
如果您使用带有文本的按钮:
<com.google.android.material.button.MaterialButton
android:id="@+id/button"
style="@style/Widget.MaterialComponents.Button.Icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:textAppearance="@style/ButtonStyle"
app:icon="@drawable/icon"
app:iconTint="@null"
app:iconGravity="textStart"
android:textColor="@color/button_text_color"
app:backgroundTintMode="src_over"
app:cornerRadius="14dp"
app:iconPadding="15dp"
android:paddingStart="24dp"
android:paddingTop="5dp"
android:paddingEnd="24dp"
android:paddingBottom="5dp"
app:backgroundTint="@color/button_background_color"
android:theme="@style/Theme.MaterialComponents.Light"/>
结果:
推荐阅读
- python - Cassandra 创建多个连接而不释放
- r - 如何从具有不同格式和货币类型的叙述中提取货币价值和货币?
- angular - flatMap 不是 Angular Universal 中的函数;tsconfig.server.json 配置错误?
- uwp - C++/WinRT 无法从 'winrt::com_ptr 转换参数 1
' 到 'winrt::array_view - python - 基准测试 Python 并行,为什么 Ubuntu 的执行速度比 Windows 慢?
- angular - 如何以角度访问组件中的changelog.md文件?
- javascript - 在 react-native 中的 headerRight 上添加多个按钮
- cassandra - 在 Cassandra 中创建时 JanusGraph .graphml 文件架构问题
- c# - 会有更好的方法来做到这一点吗?
- php - 有没有办法从 PHP 脚本中达到 API 端点但保留原始请求方法?