【发布时间】:2017-08-07 15:40:19
【问题描述】:
我的三星 Galaxy s7 刚刚更新到 Android Nougat 7.0,我注意到一些按钮的显示方式有所不同。我碰巧有另一个尚未完成更新的 Galaxy s7(Marshmallow 6.0.1)。我可以很清楚地看到大小的差异:
棉花糖:
牛轧糖:
SHARE 按钮的 layout_height 很难设置为 44dp。在 Android Studio 中使用 Layout Inspector 我可以读到它解析为 Marshmallow 的 176px 和 Nougat 的 132px(mMeasuredHeight 的值相同)。您还可以看到左侧布局的其他部分保持不变(忽略小拇指向上图标)。
另一个例子:
棉花糖:
牛轧糖:
我正在为按钮使用以下样式:
<style name="AppTheme.Button" parent="Widget.AppCompat.Button">
<item name="android:textSize">14sp</item>
<item name="android:textColor">@color/colorPrimaryDark</item>
<item name="android:backgroundTint" tools:targetApi="lollipop">@color/colorTextBrightPrimary</item>
<item name="backgroundTint" >#FFFFFF</item>
<item name="colorButtonNormal">@color/colorTextBrightPrimary</item>
</style>
<style name="AppTheme.Button.Accent" parent="AppTheme.Button">
<item name="android:textColor">@color/colorTextBrightPrimary</item>
<item name="android:backgroundTint" tools:targetApi="lollipop">@color/colorAccent</item>
<item name="backgroundTint" >@color/colorAccent</item>
<item name="colorButtonNormal">@color/colorAccent</item>
</style>
虽然 SHARE 按钮是自定义视图,但扩展了 AppCompatButton,Google 和 Facebook auth 按钮只是 AppCompatButtons。无论哪种方式,它们在更新之前看起来都不同,并且代码和设备上没有任何其他更改(文本大小和缩放是相同的)。
知道发生了什么吗?如何确保这些布局在各种设备/操作系统上保持相同?
【问题讨论】:
-
“在 Android Studio 中使用 Layout Inspector 我可以读到它解析为 Marshmallow 的 176px 和 Nougat 的 132px(mMeasuredHeight 的值相同)”——是否有任何边距?这些边距有变化吗? SHARE按钮在里面的任何容器上是否有任何填充?那个填充改变了吗?如果您查看
Configuration和DensityMetrics,它们报告的密度是否发生了变化? -
@CommonsWare 在这两种情况下都没有边距。在这两种情况下,容器填充都等于 0。然而,按钮的填充确实发生了变化。牛轧糖 48 40 48 40 和棉花糖 36 30 36 30 分别用于左上右下。我不在任何地方的代码中设置填充
-
好的,也许他们改变了按钮的默认填充。这将解释部分差异,尽管可能不是全部。您可以尝试在您的样式中定义填充,看看有多大帮助。
-
@CommonsWare 抱歉,我犯了一个错误,它填充了 Marshmallow 48/40 和 Nougat 36/30 - 这没有意义吧?为什么不同的解析高度?我尝试更改填充,但正如预期的那样,它进一步增加了填充。
-
我继续假设按钮的默认可绘制对象可能已更改,因此存在差异,因此我创建了自己的可绘制对象,以便更好地控制填充和大小。不是一个理想的解决方案,因为涟漪效果不如原来的那么好,因此这并不是问题的真正答案。该主题的任何想法或线索都会很棒!
标签: android android-layout android-6.0-marshmallow android-button android-7.0-nougat