Google 在 XML 中使用 onClick 时 SignInButton 不会触发

Google SignInButton does not fire when using onClick in XML

我有一个只包含一个按钮的简单布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.gms.common.SignInButton
        android:id="@+id/sign_in_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="signIn"/>
</RelativeLayout>

在我的 MainActivity 中,我有这个方法:

public void signIn(View v) {
    Toast.makeText(getApplicationContext(), "Button clicked", Toast.LENGTH_LONG).show();
}

但是没有任何反应。我也尝试添加:

android:clickable="true"

但是没有用。如果在按钮上设置点击侦听器,它将起作用。如何直接从布局文件中设置onClick?

SignInButton 是扩展 View 组件的自定义视图。 doc 表示直接在您的 activity 或片段中使用 setOnClickListener

SignInButton source codeonClick 被覆盖,需要 mClientListener 才能工作。设置 mClientListener 的唯一方法是使用 setOnClickListener.

只需在您的 activity 或片段中直接使用 OnClick 侦听器:

signInButton = (SignInButton)findViewById(R.id.sign_in_button);
signInButton.setOnClickListener(this);

OnClickListener 工作正常。我试过了。

XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/button"
        android:onClick="signInButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        />

    <com.google.android.gms.common.SignInButton
        android:id="@+id/sign_in_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</RelativeLayout>

Java代码:

 public void signInButton(View v) {
        Toast.makeText(getApplicationContext(), "Button clicked", Toast.LENGTH_LONG).show();
    }