意外转换为 AppCompatButton:布局标记为 Button

Unexpected cast to AppCompatButton: layout tag was Button

来自 AppCompatButton 参考页:

This will automatically be used when you use Button in your layouts. You should only need to manually use this class when writing custom views.

我正在将一个普通的 Button 转换为 AppCompatButton,这样我就可以使用 setSupportBackgroundTintList 方法:

AppCompatButton button = (AppCompatButton) findViewById(R.id.normalButton);
button.setSupportBackgroundTintList(ColorStateList.valueOf(tintColor));

它可以毫无问题地构建和运行,但是 Android Studio 1.4 给了我令人讨厌的铸造线上的红色高亮:

Unexpected cast to AppCompatButton: layout tag was Button

有什么想法吗?

它看起来像是 IDE 类型检查中的错误 - Button 是 AppCompatButton 的直接祖先,因此转换为 AppCompatButton 应该没问题。我相信你可以这样称呼它:

Button button = (Button) findViewById(R.id.normalButton);
((AppCompatButton)button).setSupportBackgroundTintList(ColorStateList.valueOf(tintColor));

或更好

((TintableBackgroundView)button).setSupportBackgroundTintList(ColorStateList.valueOf(tintColor));

如果您使用 Butterknife,一切都会按预期运行,没有任何警告:

@Bind(R.id.normalButton)
AppCompatButton button;