我的三星Galaxy s7刚刚更新到Android Nougat 7.0,我注意到一些按钮的显示方式不同。我碰巧有另一个Galaxy s7,尚未经历更新(Marshmallow 6.0.1)。我可以非常清楚地看到尺寸的差异:
棉花糖:
牛轧糖:
SHARE 按钮的layout_height硬设置为44dp。在Android Studio中使用Layout Inspector我可以读到它解析为Marspmallow的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身份验证按钮只是AppCompatButtons。在任何一种方式中,它们在更新之前看起来都不同,代码中没有其他任何更改,也没有在设备上更改(文本大小和缩放是相同的)。
知道发生了什么事吗?如何确保这些布局在各种设备/操作系统上保持不变?
答案 0 :(得分:0)
drawable可以有自己的填充。在九补丁PNG文件的情况下,其仅具有在图像的实际非透明/调整大小部分之外的透明像素。在ShapeDrawable
的情况下,您可以直接在XML中声明填充。等等。这可能会或可能不会在布局检查器等工具中显示为“填充”,因为它们专注于在窗口小部件上声明的填充。
由于您使用的上一个背景有问题,而替换背景没有,我的猜测是这种隐式填充是问题。
您有两种尝试解决此问题的方法:
风险但很简单的方法是在样式资源的res/values-v24/
变体中尝试在按钮本身上使用负填充(或者,可选地,使用样式中的一致维度资源,根据{{1}}或不更改维度值。您将不得不修改一下以尝试获取“撤消”更改的值。我称之为“冒险”,因为我没有最模糊的想法Android如何尊重负面填充。
加重方法是尝试找到您之前使用的实际按钮背景,并查看有关它的更改。 drawables将在-v25
的主题或平台的主题中声明,然后实际的drawable本身将在appcompat-v7
或平台中定义。