Android - 相对布局下的按钮在单击时不会启动OnClickListener

时间:2016-03-20 10:09:37

标签: android xml button layout onclicklistener

您好,这是我的xml文件

<RelativeLayout 
    android:id="@+id/tutorialBox"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingTop="15dip"
    android:paddingBottom="15dip"> 

    <Button
        android:id="@+id/closeBen"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="@string/CloseBenny"
        android:layout_alignBottom="@+id/bennybox"
        android:layout_alignEnd="@+id/chatbub" />

</RelativeLayout>

我为它做了一个点击监听器

  final Button closeBt = (Button) findViewById(R.id.closeBen);
    closeBt.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            closeBt.setText("Im a button");
        }
    });

由于某些原因,当我点击此按钮时没有任何反应它看起来没有被点击。 当我从实际布局中取出按钮时一切正常 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

而不是将onClick属性添加到xml中的按钮标记。

<Button
    android:id="@+id/closeBen"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="@string/CloseBenny"
    android:onClick = "close_clicked"
    android:layout_alignBottom="@+id/bennybox"
    android:layout_alignEnd="@+id/chatbub" />

然后在Main Activity中创建一个像这样的新方法。

public void close_clicked (View v){
   // Your code
}

无需添加点击列表器。

答案 1 :(得分:0)

你的RelativeLayout看起来不太好,是你的主要容器吗?
也许这样试试

<?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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">


<Button
    android:id="@+id/closeBen"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:text="@string/CloseBenny"
    android:layout_alignBottom="@+id/bennybox"
    android:layout_alignEnd="@+id/chatbub" />
</RelativeLayout>

一个好的做法是全局声明你的小部件然后在OnCreate

中实例化它们
public class Foo extends AppCompatActivity {

private Button closeBenny;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    closeBenny = (Button)findViewById(R.id.closeBen);
    closeBenny.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            closeBenny.setText("Im a button");
        }
    });
  }
}