自定义视图没有触发OnClickListener

我已经创build了一个自定义button,从XML布局充气。 一切工作正常,除了没有触发点击侦听器。
我怀疑问题是因为android:clickable="true"属性,因为当我删除它的点击侦听器被触发。 但我需要设置这个属性作为我的自定义视图使用select器作为背景,如果我删除它,那么select器将不再工作。

这是class级定义:

 public class CustomButton extends LinearLayout{ public CustomButton(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); inflater.inflate(R.layout.custom_button, this, true); TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomButton, 0, 0); String titleStr = a.getString(R.styleable.CustomButton_title); String subTitleStr = a.getString(R.styleable.CustomButton_subTitle); int iconResId = a.getResourceId(R.styleable.CustomButton_icon, R.drawable.ic_launcher); a.recycle(); TextView title = (TextView)findViewById(R.id.title); title.setText(titleStr); TextView subTitle = (TextView)findViewById(R.id.subTitle); subTitle.setText(subTitleStr); ImageView icon = (ImageView)findViewById(R.id.icon); icon.setImageResource(iconResId); } } 

自定义视图的XML布局膨胀了:

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="@drawable/white_box" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/main_button_selector" android:clickable="true" android:gravity="center" android:orientation="horizontal"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="icon" android:layout_marginLeft="5dip" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginRight="5dip" android:orientation="vertical"> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/grey_text" android:textSize="@dimen/mainTextSize" android:textStyle="bold"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/subTitle" android:ellipsize="end" android:maxLines="2" android:textColor="@color/grey" android:textSize="@dimen/mainSubTextSize"/> </LinearLayout> </LinearLayout> </FrameLayout> 

以下是我在XML布局中使用它的方法:

  <com.customviews.CustomButton android:id="@+id/pay" android:layout_weight="1" android:layout_width="0dip" android:layout_height="fill_parent" custom:title="Hello World" custom:subTitle="Subtitle" custom:icon="@drawable/ic_launcher"/> 

以及活动如何设置点击监听器:

  CustomButton button = (CustomButton) findViewById(R.id.pay); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MyActivity.this, "Hello World!", Toast.LENGTH_LONG).show(); 

我已经看到了几个线程已经解决这个问题,但他们没有帮助我。 将不胜感激任何帮助。

Solutions Collecting From Web of "自定义视图没有触发OnClickListener"

我担心没有设置android:clickable="true"不会触发select器背景,但是在View类的setOnClickListener()方法后,我看到setClickable(true)被调用:

 public void setOnClickListener(OnClickListener l) { if (!isClickable()) { setClickable(true); } getListenerInfo().mOnClickListener = l; } 

所以,从布局声明中删除android:clickable="true" ,并设置我的自定义button的点击侦听器解决了这个问题。