Android中使EditText只读的方法(可恢复编辑状态)
分类:Android, Java
阅读 (15,537)
Add comments
7月 262016
可以通过以下几种方法实现EditText的只读属性
1. 方法一:使用EditText的android:Editable属性
将EditText的Editable属性设置为false后,EditText就成只读了,缺点是不能在java代码中动态设置,而且这个属性android官方已经不推荐使用了,官方的解释是要想一个view可编辑(Editable=true)可以用EditText,不可编辑用TextView就可以了 8-O
2. 方法二:使用TextView替代
既然TextView和EditText就差一个可编辑,那么用一个TextView去替代EditText好了。只读的时候显示TextView隐藏EditText,编辑的时候显示EditText隐藏TextView,不过TextView必须和EditText用同样的样式,以不让用户查觉到组件变换了。本人没亲测这种方法,大家有兴趣的话可以试试。
3. 方法三:设置EditText的keylistener来实现
代码不多,直接把完整的代码贴出来吧
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
package com.bcoder.study.edittextapp; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.method.KeyListener; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity { EditText edt1; KeyListener storedKeylistener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edt1 = (EditText) findViewById(R.id.editText); // 保存默认的KeyListener以便恢复 storedKeylistener = edt1.getKeyListener(); } public void setReadOnly(View v){ // 设置KeyListener为null, 变为不可输入状态 edt1.setKeyListener(null); // 如果需要,设置文字可选 edt1.setTextIsSelectable(true); } public void setEditable(View v){ // 可编辑时弹出软键盘 final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(edt1, 0); // 恢复KeyListener edt1.setKeyListener(storedKeylistener); // 如果需要,设置文字可选 edt1.setTextIsSelectable(true); // 恢复KeyListener后,键盘不会自动弹出,要通过代码弹出 edt1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { imm.showSoftInput(edt1, 0); } }); // 将光标定位到最后 edt1.setSelection(edt1.getText().length()); } } |
布局文件代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" 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" tools:context="com.bcoder.study.edittextapp.MainActivity"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/editText" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:singleLine="false" android:lines="5" android:text="http://svn1.bcoder.com" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Readonly" android:id="@+id/button" android:layout_below="@+id/editText" android:layout_centerHorizontal="true" android:layout_marginTop="74dp" android:onClick="setReadOnly" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Editable" android:id="@+id/button2" android:layout_below="@+id/button" android:layout_centerHorizontal="true" android:onClick="setEditable" /> </RelativeLayout> |