Android Nougat有不同的dp计算?更新后按钮大小已更改

时间:2017-03-16 12:45:48

标签: android android-layout android-6.0-marshmallow android-button android-7.0-nougat

我的三星Galaxy s7刚刚更新到Android Nougat 7.0,我注意到一些按钮的显示方式不同。我碰巧有另一个Galaxy s7,尚未经历更新(Marshmallow 6.0.1)。我可以非常清楚地看到尺寸的差异:

棉花糖:

enter image description here

牛轧糖:

enter image description here

SHARE 按钮的layout_height硬设置为44dp。在Android Studio中使用Layout Inspector我可以读到它解析为Marspmallow的176px和Nougat的132px(mMeasuredHeight的值相同)。您还可以看到左侧布局的其他部分保持不变(忽略小拇指向上图标)。

另一个例子:

棉花糖:

Marshmallow

牛轧糖:

enter image description here

我使用以下样式设置按钮:

<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。在任何一种方式中,它们在更新之前看起来都不同,代码中没有其他任何更改,也没有在设备上更改(文本大小和缩放是相同的)。

知道发生了什么事吗?如何确保这些布局在各种设备/操作系统上保持不变?

1 个答案:

答案 0 :(得分:0)

drawable可以有自己的填充。在九补丁PNG文件的情况下,其仅具有在图像的实际非透明/调整大小部分之外的透明像素。在ShapeDrawable的情况下,您可以直接在XML中声明填充。等等。这可能会或可能不会在布局检查器等工具中显示为“填充”,因为它们专注于在窗口小部件上声明的填充。

由于您使用的上一个背景有问题,而替换背景没有,我的猜测是这种隐式填充是问题。

您有两种尝试解决此问题的方法:

  • 风险但很简单的方法是在样式资源的res/values-v24/变体中尝试在按钮本身上使用负填充(或者,可选地,使用样式中的一致维度资源,根据{{​​1}}或不更改维度值。您将不得不修改一下以尝试获取“撤消”更改的值。我称之为“冒险”,因为我没有最模糊的想法Android如何尊重负面填充。

  • 加重方法是尝试找到您之前使用的实际按钮背景,并查看有关它的更改。 drawables将在-v25的主题或平台的主题中声明,然后实际的drawable本身将在appcompat-v7或平台中定义。