使 TextInputEditText 只读但可点击
Posted
技术标签:
【中文标题】使 TextInputEditText 只读但可点击【英文标题】:Make TextInputEditText readonly but clickable 【发布时间】:2021-12-17 01:44:25 【问题描述】:我有一个表单,其中有 TextInputEditText,我希望它应该在单击它时显示一个时间选择器,但用户不应该能够直接在该框中输入任何文本。我不会用 TextView 或 Button 替换它,因为表单的轮廓框类似于屏幕截图。我想保持表单中字段的统一性。
这是 EditText 的代码 --
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/edittext_add_name"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_
android:layout_
android:layout_marginStart="16dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="16dp"
android:fontFamily="sans-serif-light"
android:inputType="textAutoComplete"
android:minHeight="@dimen/min_height"
android:paddingLeft="6dp"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button_import"
app:startIconDrawable="@drawable/ic_baseline_child_care_24">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/edittext_add_name_layout"
android:layout_
android:layout_
android:hint="Name"
android:inputType="textEmailAddress" />
</com.google.android.material.textfield.TextInputLayout>
我尝试过enabled=false
,但该字段也无法点击。有什么建议我怎样才能达到预期的效果?
【问题讨论】:
试试 enabled=false 和 clickable=true 你试过android:inputType="date"
吗?
这将打开键盘输入数字,他想打开日期对话框
【参考方案1】:
我希望这段代码能帮助你获得我已经多次做过同样事情的所需输出。
第一件事就是改变布局
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/edittext_add_name"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_
android:layout_
android:layout_marginHorizontal="16dp"
android:layout_marginTop="32dp"
android:fontFamily="sans-serif-light"
android:inputType="textAutoComplete"
android:paddingStart="6dp"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:ignore="RtlSymmetry">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/edt"
android:layout_
android:layout_
android:hint="@string/name"
android:clickable="false"
android:cursorVisible="false"
android:focusable="false"
android:focusableInTouchMode="false"
/>
</com.google.android.material.textfield.TextInputLayout>
在Java端做这个修改来实现输出
public class TestActivity extends AppCompatActivity
Calendar myCalendar;
TextInputEditText edt ;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
edt = findViewById(R.id.edt);
myCalendar = Calendar.getInstance();
DatePickerDialog.OnDateSetListener dateListener = (datePicker, year, monthOfYear, dayOfMonth) ->
myCalendar.set(Calendar.YEAR, year);
myCalendar.set(Calendar.MONTH, monthOfYear);
myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
updateEdtTextview();
;
edt.setOnClickListener(view -> new DatePickerDialog(
TestActivity.this,
dateListener,
myCalendar.get(Calendar.YEAR),
myCalendar.get(Calendar.MONTH),
myCalendar.get(Calendar.DAY_OF_MONTH)).show());
private void updateEdtTextview()
String myFormat = "dd/MM/yyyy"; //In which you need put here
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
edt.setText(sdf.format(myCalendar.getTime()));
【讨论】:
以上是关于使 TextInputEditText 只读但可点击的主要内容,如果未能解决你的问题,请参考以下文章
启用 TextInputLayout = false 后,如何使 TextInputEditText 中的文本变灰?
backgroundTint 属性为整个 TextInputEditText 着色