监听器不处理包含Edittext的linearlayout

时间:2016-07-22 20:08:01

标签: android android-layout

我有一个包含在LinearLayout中的EditText。对于我的项目,我在LinearLayout上设置了一个OnclickListener。当我启动应用程序时,点击布局没有任何反应。也许它归功于EditText,但需要OnCliclistener才能在LenearLayout上运行。

mycode的:

XML

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_below="@+id/lnlabelnameuniteholder"
        android:id="@+id/choix_decategorie"
        android:layout_marginTop="10dp" >

        <EditText
            android:text="@string/choix_de_categorie"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textStyle="italic"
            android:textSize="18sp"
            android:textColor="#000" />

    </LinearLayout>

CODE

    maCategorie = (LinearLayout) findViewById(R.id.choix_decategorie);



           maCategorie.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            MyDB db = new MyDB(MyActivityCategorie.this);
            ArrayList<Category> categoryList = db.getCategory();

            ChoiceCategoryDialog categoryDialog = new ChoiceCategoryDialog(MyActivityCategorie.this, R.string.add_category, mCategoryTextView.getText().toString(), categoryList, MyActivityCategorie.this, true);
            categoryDialog.show();
        }
    });

由于

5 个答案:

答案 0 :(得分:0)

试试这个例子:

LinearLayout yourLayout = (LinearLayout) findViewById (R.id.yourID);
        yourLayout.setOnClickListener(new View.OnClickListener() { // remember to use "View."
            @Override
            public void onClick(View v) {
                Toast.makeText(this, "hello", Toast.LENGTH_LONG).show();
            }
        });

设置LinearLayout属性android:clickable="true"

如果您在布局设置android:clickable="false"中为所有这些设置了按钮或文本视图

答案 1 :(得分:0)

您必须设置LinearLayout clickable =“true”

<LineartLayout.... android:clickable="true"...>

这将有效

你需要在EditText中添加一些边距,因为EditText在LinearLayout上有优势,而且LinearLayout不能保留空格以便可点击。

<EditText android:layout_margin="5dp".../>

答案 2 :(得分:0)

在你的代码中,你指的是R.id.choix_decategorie(你的代码中没有显示,这是你想在onClickListener上设置的LinearLayout吗?

对于具有子元素的LinearLayout(与您的一样) - 可能需要阻止子元素获得焦点 - 您可以像这样设置android:descendantFocusability="blocksDescendants"

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_below="@+id/choix_decategorie"
        android:id="@+id/lnpriceholderlabel"
        android:descendantFocusability="blocksDescendants"
        android:layout_marginTop="10dp" >

为了获得好的衡量标准,您还可以在每个子元素上设置android:clickable="false"。所以你的布局看起来像这样:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_below="@+id/choix_decategorie"
        android:id="@+id/lnpriceholderlabel"
        android:descendantFocusability="blocksDescendants"
        android:layout_marginTop="10dp" >

        <EditText
            android:text="@string/choix_de_categorie"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textStyle="italic"
            android:clickable="false"
            android:textSize="18sp"
            android:textColor="#000" />

 </LinearLayout>

尝试一下,让我们知道这是否有效。

答案 3 :(得分:0)

您的点击监听器将起作用,但您的编辑文本会隐藏线性布局,如果您删除它将起作用的编辑文本,或者您可以设置高度和宽度不等于线性布局。

答案 4 :(得分:0)

作为解决方法,您可以执行以下操作(kotlin代码):

editText.inputType = InputType.TYPE_NULL
editText.setOnClickListener { linearLayout.performClick() }

在这种情况下,editText将不会弹出键盘,而linearLayout将接收到click事件。