Android:从 Material 1.0 升级导致问题
Android: Upgrade from Material 1.0 causing problems
我最近从 material 1.0 升级到 material 1.1 以便能够使用新的 TabLayoutMediator
。
Gradle:
implementation 'com.google.android.material:material:1.1.0'
成功了。但是,自升级以来,我现在面临着奇怪的 UI 问题。
[
我在图片中包含了四个问题。问题是:
- Material按钮有黑色边框。升级前没有边框。
- Material FloatingActionsButtons 突然有黑色图标。升级前图标是白色的。
- 导航图标也是黑色的。升级前这些图标是灰色的。
- 文本域变形得面目全非
现在,我觉得很奇怪,这样一个小更新会导致如此奇怪的问题。同样奇怪的是,我尝试了一些手动修复 - 例如更改 FloatingActionButton 的色调以再次获得白色图标 - 但这些手动修复似乎不起作用。
此问题的原因是什么,我该如何解决?我考虑过回到 material 1.0 ....
更新
我的应用主题:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textViewStyle">@style/GlobalTextViewStyle</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
我的Material按钮:
<com.google.android.material.button.MaterialButton
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="20dp"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:textAllCaps="false"
android:textColor="#FFF"
android:textSize="15sp"
app:backgroundTint="#2196F3"
app:cornerRadius="6dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintWidth_max="400dp"
app:strokeWidth="2dp" />
更新#2
到目前为止,我通过手动更改颜色修复了所有问题。 material 1.1 中的默认值似乎发生了变化。但是,文本字段仍然会导致问题。这是我用来添加它们的代码:
TextInputLayout textInputLayout = new TextInputLayout(view.getContext());
textInputLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
textInputLayout.setPadding(0, 0, 0, 40);
TextInputEditText editText = new TextInputEditText(view.getContext());
editText.setHint(getVerboseName());
textInputLayout.addView(editText);
linearLayout.addView(textInputLayout);
MaterialButtons have a black border. Before the upgrade they had no border.
在您的 MaterialButton 中:
<com.google.android.material.button.MaterialButton
style="@style/Widget.AppCompat.Button.Borderless"
app:strokeWidth="2dp" />
- 有
app:strokeWidth="2dp"
:去掉。
- 您正在使用 AppCompat 主题。将其更改为
Widget.MaterialComponents.Button
.
好的总结:
手动修复确实有效,只需要确保使用正确的 Material 样式即可。这四个错误彼此无关。第四个错误是由于我没有为 TextInputLayout 中的 EditText 提供 TextInputLayout 的上下文,而是片段本身的上下文。
如果其他人遇到这样的问题,则它们是不同的问题,应该单独对待。升级到 Material 1.1 引入了新的默认值 - 不是错误。
我最近从 material 1.0 升级到 material 1.1 以便能够使用新的 TabLayoutMediator
。
Gradle:
implementation 'com.google.android.material:material:1.1.0'
成功了。但是,自升级以来,我现在面临着奇怪的 UI 问题。
[
我在图片中包含了四个问题。问题是:
- Material按钮有黑色边框。升级前没有边框。
- Material FloatingActionsButtons 突然有黑色图标。升级前图标是白色的。
- 导航图标也是黑色的。升级前这些图标是灰色的。
- 文本域变形得面目全非
现在,我觉得很奇怪,这样一个小更新会导致如此奇怪的问题。同样奇怪的是,我尝试了一些手动修复 - 例如更改 FloatingActionButton 的色调以再次获得白色图标 - 但这些手动修复似乎不起作用。
此问题的原因是什么,我该如何解决?我考虑过回到 material 1.0 ....
更新
我的应用主题:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:textViewStyle">@style/GlobalTextViewStyle</item>
</style>
<style name="AppTheme.NoActionBar">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
我的Material按钮:
<com.google.android.material.button.MaterialButton
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="20dp"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:textAllCaps="false"
android:textColor="#FFF"
android:textSize="15sp"
app:backgroundTint="#2196F3"
app:cornerRadius="6dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintWidth_max="400dp"
app:strokeWidth="2dp" />
更新#2
到目前为止,我通过手动更改颜色修复了所有问题。 material 1.1 中的默认值似乎发生了变化。但是,文本字段仍然会导致问题。这是我用来添加它们的代码:
TextInputLayout textInputLayout = new TextInputLayout(view.getContext());
textInputLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
textInputLayout.setPadding(0, 0, 0, 40);
TextInputEditText editText = new TextInputEditText(view.getContext());
editText.setHint(getVerboseName());
textInputLayout.addView(editText);
linearLayout.addView(textInputLayout);
MaterialButtons have a black border. Before the upgrade they had no border.
在您的 MaterialButton 中:
<com.google.android.material.button.MaterialButton
style="@style/Widget.AppCompat.Button.Borderless"
app:strokeWidth="2dp" />
- 有
app:strokeWidth="2dp"
:去掉。 - 您正在使用 AppCompat 主题。将其更改为
Widget.MaterialComponents.Button
.
好的总结:
手动修复确实有效,只需要确保使用正确的 Material 样式即可。这四个错误彼此无关。第四个错误是由于我没有为 TextInputLayout 中的 EditText 提供 TextInputLayout 的上下文,而是片段本身的上下文。
如果其他人遇到这样的问题,则它们是不同的问题,应该单独对待。升级到 Material 1.1 引入了新的默认值 - 不是错误。