[android]How to implement an not editable scrollable EditText?(如何实现一个不可编辑的带滚动条的EditText?) .

 

要显示不可编辑的文字,最简单的方法当然是使用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)。代码如下:

 

  1. editText.setFilters(new InputFilter[] { new InputFilter() {  
  2.     public CharSequence filter(CharSequence src, int start, int end, Spanned dst, int dstart, int dend) {  
  3.         Log.d(TAG, "src=" + src + ";start=" + start + ";end=" + end);  
  4.         Log.d(TAG, "dst=" + dst + ";dstart=" + dstart + ";dend=" + dend);  
  5.         return src.length() < 1 ? dst.subSequence(dstart, dend) : "";  
  6.     }  
  7. } });  
  

 

 

(2)设置滚动条

 

在layout里面设置EditText的属性:

android:scrollbars="vertical"

 

这只是让垂直滚动条可见,要让其动起来,还得使用一个方法:

public final void setMovementMethod (MovementMethod movement)

 

可以直接使用简单的滚动方法,setMovementMethod(ScrollingMovementMethod.getInstance());

 

 

完整代码如下:

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <EditText    
  8.     android:id="@+id/edittext1"  
  9.     android:layout_width="fill_parent"   
  10.     android:layout_height="fill_parent"   
  11.     android:scrollbars="vertical"  
  12.     android:text="@string/hello"  
  13.     />  
  14. </LinearLayout>  

 

  1. package com.vani.android.jack;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.text.InputFilter;  
  6. import android.text.Spanned;  
  7. import android.text.method.ScrollingMovementMethod;  
  8. import android.util.Log;  
  9. import android.widget.EditText;  
  10.   
  11. public class UneditableEditText extends Activity {  
  12.     private static final String TAG = "UneditableEditText";  
  13.   
  14.     /** Called when the activity is first created. */  
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState) {  
  17.         super.onCreate(savedInstanceState);  
  18.         setContentView(R.layout.main);  
  19.         EditText editText = (EditText) findViewById(R.id.edittext1);  
  20.         editText.setCursorVisible(false);  
  21.         editText.setMovementMethod(ScrollingMovementMethod.getInstance());  
  22.         editText.setFilters(new InputFilter[] { new InputFilter() {  
  23.             public CharSequence filter(CharSequence src, int start, int end, Spanned dst, int dstart, int dend) {  
  24.                 Log.d(TAG, "src=" + src + ";start=" + start + ";end=" + end);  
  25.                 Log.d(TAG, "dst=" + dst + ";dstart=" + dstart + ";dend=" + dend);  
  26.                 return src.length() < 1 ? dst.subSequence(dstart, dend) : "";  
  27.             }  
  28.         } });  
  29.     }  
  30. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值