AppCompate设置背景不生效原因排查

问题

遇到一个问题使用AppCompateButton设置背景不生效,百度了一下也看到有人说AppCompate设置后背景不生效问题,主要原因和主题有关。于是我分析了相关的主题,因为把appcompate从1.2.0升级到1.3.1了,所以分析一顿后走了不少弯路。

代码如下:

        .setTitle("title")
        .setMessage("messsssssssssssssssssage")
        .setPositiveButton("ok", null)
        .setNegativeButton("no", null)
        .create();
dialog.show();

其中AlertDialogThemed定义为




这个activity所设置的theme为:


    
        

        
    


但是出来的效果是这样,本来底部按钮应该是黄底黑字的,但是这里没有生效,单独只有按钮的背景不生效,通过layoutInspector中可以看到背景没有设置进去。


image.png

image.png

原因

因为dailog的layout是通过主题来设置的,而主题又是一个一个继承,需要深挖的,所以一时不好找到对应的layout是哪一个。所以从layoutInspector中看layout布局,然后全局搜索关键的控件布局,基本可以锁定layout布局应该是长这样:



 

 

从这份layout可以得出,按钮的背景应该再style里设置,例如这个:style="?attr/buttonBarPositiveButtonStyle",所以我们覆写这个属性试试。

[图片上传中...(image.png-b7ada6-1658391905489-0)]

果然生效了。

全局收一下设置的地方,发现三个按钮对应的style都可以指向buttonBarButtonStyle,所以如果样式一样的话,可以直接设置buttonBarButtonStyle

?attr/buttonBarButtonStyle
?attr/buttonBarButtonStyle
?attr/buttonBarButtonStyle

修改

把android:buttonStyle改成buttonBarButtonStyle就可以了。


你可能感兴趣的:(AppCompate设置背景不生效原因排查)