恒州没有在开发者预览版Android L系统匹配(Constant states do not ma

2019-09-30 08:52发布

我试图做一些if语句,这部作品在机器人的每个版本(16或更高,因为getDrawable的),除了安卓L(在最新的测试)。 代码如下:

if (item.getIcon().getConstantState().equals(getResources().getDrawable(R.drawable.add_to_fav_normal).getConstantState())

任何帮助/提示或解释,将不胜感激!

Answer 1:

使用item.getContext().getDrawable(int)或等效ContextCompat方法。

在API 21开始,所有的框架部件是负载可绘制使用Context.getDrawable()其在充气过程中应用上下文的当前主题。 这基本上只是调用getResources().getDrawable(..., getTheme())内部,所以你也可以使用context.getResources().getDrawable(..., context.getTheme())

     if (item.getIcon().getConstantState().equals(item.getContext()
                .getDrawable(R.drawable.add_to_fav_normal).getConstantState())

在一般情况下,虽然,你不应该依赖于这个检查。 周围有什么恒定的状态,你会从一个特定的绘制收到任何API保证。



Answer 2:

该解决方案是方便只测试:

public static void assertEqualDrawables(Drawable drawableA, Drawable drawableB) {
    Bitmap bitmap1 = ((BitmapDrawable) drawableA).getBitmap();
    Bitmap bitmap2 = ((BitmapDrawable) drawableB).getBitmap();
    ByteBuffer buffer1 = ByteBuffer.allocate(bitmap1.getHeight() * bitmap1.getRowBytes());
    bitmap1.copyPixelsToBuffer(buffer1);

    ByteBuffer buffer2 = ByteBuffer.allocate(bitmap2.getHeight() * bitmap2.getRowBytes());
    bitmap2.copyPixelsToBuffer(buffer2);

    Assert.assertTrue(Arrays.equals(buffer1.array(), buffer2.array()));
}


Answer 3:

根据@ alanv的回答,下面是我做的,是成功的:

if (imgClicked.getDrawable().getConstantState()
                    .equals(ContextCompat.getDrawable(this,
                            R.drawable.add_profile).getConstantState())) {

     //Both images are same

}else{

    //Both images are NOT same      

}

感谢的@alanv :)



文章来源: Constant states do not match in developer preview android L