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>
我只在 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>