可以通过以下几种方法实现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来实现
代码不多,直接把完整的代码贴出来吧
Java
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
45
46
47
48
49
50
51
52
53
54
55
packagecom.bcoder.study.edittextapp;
importandroid.content.Context;
importandroid.support.v7.app.AppCompatActivity;
importandroid.os.Bundle;
importandroid.text.method.KeyListener;
importandroid.view.View;
importandroid.view.inputmethod.InputMethodManager;
importandroid.widget.EditText;
importandroid.widget.TextView;
publicclassMainActivityextendsAppCompatActivity{
EditTextedt1;
KeyListenerstoredKeylistener;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edt1=(EditText)findViewById(R.id.editText);
// 保存默认的KeyListener以便恢复
storedKeylistener=edt1.getKeyListener();
}
publicvoidsetReadOnly(Viewv){
// 设置KeyListener为null, 变为不可输入状态
edt1.setKeyListener(null);
// 如果需要,设置文字可选
edt1.setTextIsSelectable(true);
}
publicvoidsetEditable(Viewv){
// 可编辑时弹出软键盘
finalInputMethodManagerimm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(edt1,0);
// 恢复KeyListener
edt1.setKeyListener(storedKeylistener);
// 如果需要,设置文字可选
edt1.setTextIsSelectable(true);
// 恢复KeyListener后,键盘不会自动弹出,要通过代码弹出
edt1.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
imm.showSoftInput(edt1,0);
}
});
// 将光标定位到最后
edt1.setSelection(edt1.getText().length());
}
}
布局文件代码
XHTML
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">
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" />
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" />
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" />
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
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">
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"/>
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"/>
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"/>
打赏
微信扫一扫,打赏作者吧~