AppCompatButton android:onClick 找不到方法异常

AppCompatButton android:onClick Could not find a method exception

我只在 KitKat 版本上有这个问题,其余的从 16 API 级别到 25 都可以正常工作

实例化layout的class有layout的方法,例子

<android.support.v7.widget.AppCompatButton
  android:onClick="onClick"
...
public void onClick(View v) {
  // do something
}

我知道我可以将其更改为侦听器、数据绑定或使用像 Butterknife 这样的库,但我想知道为什么会在 4.X 版本上崩溃?

xml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:onClick="onClick" />

    <android.support.v7.widget.AppCompatButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:onClick="onClick" />
</LinearLayout>

我找到了这个问题的一些解释。它被归档为一个错误。这是 link 错误报告。 https://issuetracker.google.com/issues/37108938

在要点中,他们说问题已在 API 24 中修复,并且 onClick 与支持库不兼容。我已经在主题中添加了关于 kitkat 问题的评论。

有一个解决方法。它在 API 19 上测试并且运行良好

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:onClick="onClick" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/appCompatButtonStyle"   // Note this
        android:text="Button"
        android:onClick="onClick" />
</LinearLayout>

在你的styles.xml

<style name="appCompatButtonStyle" parent="Widget.AppCompat.Button.Colored">
    <item name="backgroundTint">@color/colorWhite</item>
    <item name="android:textColor">@color/colorMaterialGrey</item>
</style>