首页 > 解决方案 > 如何使禁用 EditText 和 Button 的布局可点击

问题描述

我有带有 EditText 和按钮的简单布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:clickable="true"
    android:focusable="true">

    <EditText
        android:id="@+id/editText"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:focusable="false"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"/>

</LinearLayout>

我不希望 EdiText 可编辑并且想要处理点击完整布局

 public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.linearLayout).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "click", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

但它不起作用我的意思是当我点击时没有 Toast 消息。

标签: android

解决方案


正如@Liem Vo 在评论中所说:您应该添加android:clickable="false"到按钮,并确保不要在 java 中添加点击侦听器。因为事件是由子视图处理的。

对于“EditText”,您可以手动调用父母点击监听器:

editText.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            View parent = (View) v.getParent();
            parent.performClick();
        }
    });

请参考这个问题:onClick not trigger on LinearLayout with child


推荐阅读