为什么我的 android 按钮没有显示正确的背景?
Why is my android button not showing the correct background?
我正在尝试为我的 android 应用设置片段样式,当我应用 android:background
xml 属性时,它被忽略了。这是我得到的,而不是我正确设置样式的编辑文本。
背景不正确的按钮:
具有正确背景的编辑文本:
这是我的按钮的 XML:
<com.google.android.material.button.MaterialButton
android:id="@+id/register_fragment_submit_button"
style="@style/Widget.MaterialComponents.Button.UnelevatedButton"
android:text="@string/register_register_button"
android:layout_marginTop="@dimen/register_fragment_submit_button_margin_top"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/register_button_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/register_email_edittext" />
下面是我正确设置样式的 EditText 的代码:
<EditText
android:id="@+id/register_email_edittext"
style="@style/register_fragment_edittext"
android:layout_marginTop="@dimen/register_fragment_email_edittext_margin_top"
android:autofillHints="@string/register_screen_email_autofill"
android:hint="@string/register_email_edittext_hint"
android:inputType="textEmailAddress"
android:text="@={viewmodel.newUserEmail$app_debug}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/register_password_edittext" />
这是它的样式:
<style name="register_fragment_edittext">
<item name="android:paddingLeft">@dimen/register_fragment_edittext_padding_left</item>
<item name="android:background">@drawable/edittext_background</item>
<item name="android:layout_width">@dimen/register_fragment_edittext_width</item>
<item name="android:layout_height">@dimen/edit_text_height</item>
<item name="android:textColorHint">@color/colorAccent</item>
</style>
如果有人好奇,我会把可绘制的XML代码留在底部。如果重要的话,我将其放入我的应用程序级别 build.gradle 文件中以进行 material 设计:
implementation 'com.google.android.material:material:1.2.0'
有没有人有什么建议?谢谢。
可绘制的编辑文本:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/custom_edittext_bg_drawable_corners"/>
<solid android:color="@color/colorPrimary"/>
<stroke android:color="@color/colorSecondary" android:width="@dimen/custom_edittext_bg_border_width"/>
</shape>
按钮可绘制:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/custom_edittext_bg_drawable_corners"/>
<solid android:color="@color/colorSecondary"/>
<stroke android:color="@color/colorAccent" android:width="@dimen/custom_edittext_bg_border_width"/>
</shape>
如Material Button Documentation
中所述
All attributes from MaterialButton are supported. Do not use the android:background attribute. MaterialButton manages its own background drawable, and setting a new background means MaterialButton can no longer guarantee that the new attributes it introduces will function properly. If the default background is changed, MaterialButton cannot guarantee well-defined behavior.
所以我会做的,就是将 MaterialButton 更改为 Button 或 AppCompatButton
编辑
看来如果你有适当版本的元组件(1.2.0-alpha06 或更高版本),你可以使用 android:background
属性,因为它写在这里:
正如@Mariusz 回答中所述,不支持来自 Material 按钮的所有属性。
另一方面,使用最新版本的 material 设计,您可以为 Material 按钮设置自定义背景
Material图书馆:
implementation 'com.google.android.material:material:1.2.1'
您必须将背景色调属性设置为“null”,将其放入您的样式文件夹中
<style name="my_button" parent="Widget.MaterialComponents.Button">
<item name="android:background">@drawable/register_button_bg</item>
<item name="textAllCaps">false</item>
<item name="backgroundTint">@null</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
</style>
将按钮样式设置为“my_button”
<com.google.android.material.button.MaterialButton
android:id="@+id/register_fragment_submit_button"
style="@style/my_button"
....
/>
我正在尝试为我的 android 应用设置片段样式,当我应用 android:background
xml 属性时,它被忽略了。这是我得到的,而不是我正确设置样式的编辑文本。
背景不正确的按钮:
具有正确背景的编辑文本:
这是我的按钮的 XML:
<com.google.android.material.button.MaterialButton
android:id="@+id/register_fragment_submit_button"
style="@style/Widget.MaterialComponents.Button.UnelevatedButton"
android:text="@string/register_register_button"
android:layout_marginTop="@dimen/register_fragment_submit_button_margin_top"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/register_button_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/register_email_edittext" />
下面是我正确设置样式的 EditText 的代码:
<EditText
android:id="@+id/register_email_edittext"
style="@style/register_fragment_edittext"
android:layout_marginTop="@dimen/register_fragment_email_edittext_margin_top"
android:autofillHints="@string/register_screen_email_autofill"
android:hint="@string/register_email_edittext_hint"
android:inputType="textEmailAddress"
android:text="@={viewmodel.newUserEmail$app_debug}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/register_password_edittext" />
这是它的样式:
<style name="register_fragment_edittext">
<item name="android:paddingLeft">@dimen/register_fragment_edittext_padding_left</item>
<item name="android:background">@drawable/edittext_background</item>
<item name="android:layout_width">@dimen/register_fragment_edittext_width</item>
<item name="android:layout_height">@dimen/edit_text_height</item>
<item name="android:textColorHint">@color/colorAccent</item>
</style>
如果有人好奇,我会把可绘制的XML代码留在底部。如果重要的话,我将其放入我的应用程序级别 build.gradle 文件中以进行 material 设计:
implementation 'com.google.android.material:material:1.2.0'
有没有人有什么建议?谢谢。
可绘制的编辑文本:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/custom_edittext_bg_drawable_corners"/>
<solid android:color="@color/colorPrimary"/>
<stroke android:color="@color/colorSecondary" android:width="@dimen/custom_edittext_bg_border_width"/>
</shape>
按钮可绘制:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="@dimen/custom_edittext_bg_drawable_corners"/>
<solid android:color="@color/colorSecondary"/>
<stroke android:color="@color/colorAccent" android:width="@dimen/custom_edittext_bg_border_width"/>
</shape>
如Material Button Documentation
All attributes from MaterialButton are supported. Do not use the android:background attribute. MaterialButton manages its own background drawable, and setting a new background means MaterialButton can no longer guarantee that the new attributes it introduces will function properly. If the default background is changed, MaterialButton cannot guarantee well-defined behavior.
所以我会做的,就是将 MaterialButton 更改为 Button 或 AppCompatButton
编辑
看来如果你有适当版本的元组件(1.2.0-alpha06 或更高版本),你可以使用 android:background
属性,因为它写在这里:
正如@Mariusz 回答中所述,不支持来自 Material 按钮的所有属性。
另一方面,使用最新版本的 material 设计,您可以为 Material 按钮设置自定义背景
Material图书馆:
implementation 'com.google.android.material:material:1.2.1'
您必须将背景色调属性设置为“null”,将其放入您的样式文件夹中
<style name="my_button" parent="Widget.MaterialComponents.Button">
<item name="android:background">@drawable/register_button_bg</item>
<item name="textAllCaps">false</item>
<item name="backgroundTint">@null</item>
<item name="android:insetTop">0dp</item>
<item name="android:insetBottom">0dp</item>
</style>
将按钮样式设置为“my_button”
<com.google.android.material.button.MaterialButton
android:id="@+id/register_fragment_submit_button"
style="@style/my_button"
....
/>