要显示不可编辑的文字,最简单的方法当然是使用TextView,但有时出于某种原因,可能需要用EditText来显示文字,并且让其不可编辑。EditText本身是没有方法来设置使得其不可编辑的,但方法总是可以想出来的。
(1)setFilters
InputFilter用来对输入的文字进行过滤,需要实现一个方法:
public abstract CharSequence filter (CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
其中source代表你输入的文字,用键盘输入则为单个字符,start为0,end为1;粘帖时source为一串字符。
dest为现在显示的字符串,dstart,dend为光标所在字符串的位置。
下面的InputFilter为当输入任何字符时,替换为空字符(相当于不输入),如果按删除键时候,保持原来的字符,这时dstart退了一格,所以保持字符应该为dst.subSequence(dstart, dend)。代码如下:
- editText.setFilters(new InputFilter[] { new InputFilter() {
- public CharSequence filter(CharSequence src, int start, int end, Spanned dst, int dstart, int dend) {
- Log.d(TAG, "src=" + src + ";start=" + start + ";end=" + end);
- Log.d(TAG, "dst=" + dst + ";dstart=" + dstart + ";dend=" + dend);
- return src.length() < 1 ? dst.subSequence(dstart, dend) : "";
- }
- } });
(2)设置滚动条
在layout里面设置EditText的属性:
android:scrollbars="vertical"
这只是让垂直滚动条可见,要让其动起来,还得使用一个方法:
public final void setMovementMethod (MovementMethod movement)
可以直接使用简单的滚动方法,setMovementMethod(ScrollingMovementMethod.getInstance());
完整代码如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <EditText
- android:id="@+id/edittext1"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:scrollbars="vertical"
- android:text="@string/hello"
- />
- </LinearLayout>
- package com.vani.android.jack;
- import android.app.Activity;
- import android.os.Bundle;
- import android.text.InputFilter;
- import android.text.Spanned;
- import android.text.method.ScrollingMovementMethod;
- import android.util.Log;
- import android.widget.EditText;
- public class UneditableEditText extends Activity {
- private static final String TAG = "UneditableEditText";
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- EditText editText = (EditText) findViewById(R.id.edittext1);
- editText.setCursorVisible(false);
- editText.setMovementMethod(ScrollingMovementMethod.getInstance());
- editText.setFilters(new InputFilter[] { new InputFilter() {
- public CharSequence filter(CharSequence src, int start, int end, Spanned dst, int dstart, int dend) {
- Log.d(TAG, "src=" + src + ";start=" + start + ";end=" + end);
- Log.d(TAG, "dst=" + dst + ";dstart=" + dstart + ";dend=" + dend);
- return src.length() < 1 ? dst.subSequence(dstart, dend) : "";
- }
- } });
- }
- }