使textinputlayout不可编辑并在其上设置click事件

时间:2017-09-30 11:24:58

标签: android android-edittext onclicklistener android-textinputlayout

我想让用户无法使用textinputlayout,当用户点击它时,我想执行一个动作。 我在textinputlayout的edittext中添加了android:focusable="false"以使其无法使用,但现在当我点击它时,它没有在textinputlayout的onclicklistener中进行回调。

   <android.support.design.widget.TextInputLayout
        android:id="@+id/tipVideoFilePath"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/uploadVideo"
        android:layout_toLeftOf="@+id/uploadVideo">

    <EditText
        android:id="@+id/etVideoFilePath"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="@dimen/dp5"
        android:singleLine="true"
        android:focusable="false"
        android:hint="@string/videoPath"
        android:textColor="@color/black"/>
</android.support.design.widget.TextInputLayout>

8 个答案:

答案 0 :(得分:4)

试试这段代码。 为编辑文本获取clck监听器。

<android.support.design.widget.TextInputLayout
      android:layout_width="wrap_content"
      android:layout_height="wrap_content">

                    <EditText
                        android:id="+id/etVideoFilePat"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:focusable="false"
                        android:clickable="true" />
</android.support.design.widget.TextInputLayout>

答案 1 :(得分:3)

你可以尝试这些

nav li

答案 2 :(得分:0)

或者这个:

EditText放入另一个布局(RaltiveLayout)并制作EditText Match_Parent

edittext.setFocusable(false);
edittext.setClickable(false);

relativelayout.setFocusable(true);
relativelayout.setClickable(true);

在relativelayout上应用onclicklistener

答案 3 :(得分:0)

这对我有用(在科特林): editText.apply { isFocusableInTouchMode = false isClickable = false isLongClickable = false isEnabled = false }

答案 4 :(得分:0)

1)设置TextInputLayout android:clickable="true"

2)设置TextInputEditText android:clickable="true"android:focusable="false"

3)在View.OnClickListenerTextInputLayout上同时设置TextInputEditText

 <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/text_input_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true">

        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/edit_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:focusable="false"/>
 </com.google.android.material.textfield.TextInputLayout>

注意:在两个视图上都设置View.OnClickListener很重要,因为TextInputLayout大于TextInputEditText并位于其后。

答案 5 :(得分:0)

我对TextInputLayoutTextInputEditText有相同的问题。我想打开一个对话框。 这对我有用

<com.google.android.material.textfield.TextInputLayout
            android:id="@+id/country_chooser_layout"
            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:layout_marginBottom="8dp"
            >

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/country_chooser"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:clickable="true"
                android:drawableEnd="@drawable/ic_expand_arrow"
                android:focusable="false"
                android:hint="Country"
                android:inputType="textCapWords" />
        </com.google.android.material.textfield.TextInputLayout>

科特琳:

  val countryChooser = view.findViewById<TextInputEditText>(R.id.country_chooser)
  countryChooser.setOnClickListener { v -> showCountryDialog(v) }

答案 6 :(得分:0)

我的布局:

<com.google.android.material.textfield.TextInputLayout
                android:id="@+id/tvSelectBankInputLayout"
                style="@style/MyEditText.TextInputLayout.FilledBox"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/dp_16"
                android:clickable="true"
                android:hint="@string/txt_title_bank_name"
                app:endIconDrawable="@drawable/ic_right_muiten"
                app:endIconMode="custom"
                app:errorIconDrawable="@null">

                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/tvSelectBank"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:clickable="true"
                    android:cursorVisible="false"
                    android:ellipsize="end"
                    android:focusable="false"
                    android:imeOptions="actionNext"
                    android:inputType="none"
                    android:maxLines="1"
                    android:scrollHorizontally="true"
                    android:singleLine="true"
                    android:textColor="@color/c_212121"
                    android:textSize="@dimen/sp_16" />

            </com.google.android.material.textfield.TextInputLayout>

这是我的代码:

tvSelectBank?.setOnClickListener {
    startActivityForResult(intentFor<ListBankActivity>(), REQUEST_CODE)
}

答案 7 :(得分:0)

您还可以在inputType上定义EditText的{​​{1}},以使其不可编辑。

none