android中將EditText改成不可編輯的狀態


今天在做項目的時候,要想實現一個將EditText變成不可編輯的狀態,通過查找博客,發現一個好方法,對於單獨的EditText控件我們可以單獨設置

1.首先想到在xml中設置Android:editable="false",但是如果想在代碼中動態設置可編輯狀態,沒有找到對應的函數。

2。然后嘗試使用editText.setFocusable(false);和editText.setEnabled(false);設置不可編輯狀態;editText.setFocusable(true);和 editText.setEnabled(true);設置可編輯狀態。

發現在editText.setFocusable(false);和editText.setEnabled(false);時不可編輯,但是editText.setFocusable(true);和 editText.setEnabled(true);也是不可編輯的,感覺這個時候EditText控件高亮度了,但是沒有焦點

3.最后嘗試使用editText.setFocusable(false);和editText.setFocusableInTouchMode(false);設置不可編輯狀態;editText.setFocusableInTouchMode(true);editText.setFocusable(true);editText.requestFocus();設置可編輯狀態

實現方式:

android:focusable="true"  
   	android:focusableInTouchMode="true"

4.如果讓EditText不可編輯在xml實現很簡單Android:editable 可是在代碼中卻沒有setEditable,只能使用

editText.setFilters(new InputFilter[] { new InputFilter() {
 @Override
 public CharSequence filter(CharSequence source, int start,
  int end, Spanned dest, int dstart, int dend) {
   return source.length() < 1 ? dest.subSequence(dstart, dend) : "";
 }
} });

package com.battlefart;
import android.app.Activity;
import android.text.InputFilter;   
import android.text.Spanned; 
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
 public class Myfarts_details extends Activity{
     private Button Edit_button;
     private EditText fart_name;
     private EditText last_meal;
     private EditText comments;
     private String fart_name_string;
     private String last_meal_string;
     private String comments_string;
     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_farts);
        //lock();
        Edit_button=(Button)findViewById(R.id.button_edit);
        fart_name=(EditText)findViewById(R.id.fart_name);
        last_meal=(EditText)findViewById(R.id.last_meal);
        comments=(EditText)findViewById(R.id.comments);
        lock();
        Edit_button.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                Unlock();
               fart_name_string = fart_name.getText().toString();
               last_meal_string = last_meal.getText().toString();
               comments_string=comments.getText().toString();
               SharedPreferences preference = getSharedPreferences("player_information",Context.MODE_PRIVATE);
               Editor edit = preference.edit();
               edit.putString("my_fart_name",fart_name_string);
               edit.putString("my_last_meal",last_meal_string);
               edit.putString("my_comments",comments_string);
               edit.commit();
                  
            }
        });
}
    //讓EditText變成可編輯狀態
    private void Unlock() {   
                   
                    fart_name.setFilters(new InputFilter[] { new InputFilter() {   
                    @Override  
                        public CharSequence filter(CharSequence source, int start,   
                         int end, Spanned dest, int dstart, int dend) {   
                           
                        return null;
                    }   
                } });  
                    last_meal.setFilters(new InputFilter[] { new InputFilter() {   
                        @Override  
                            public CharSequence filter(CharSequence source, int start,   
                             int end, Spanned dest, int dstart, int dend) {   
                               return null;
                        }   
                    } }); 
                    comments.setFilters(new InputFilter[] { new InputFilter() {   
                        @Override  
                            public CharSequence filter(CharSequence source, int start,   
                             int end, Spanned dest, int dstart, int dend) {   
                               return null;
                        }   
                    } });   
                 
    
    }
    //讓EditText變成不可編輯狀態
    private void lock(){   
        
        fart_name.setFilters(new InputFilter[] { new InputFilter() {   
        @Override  
            public CharSequence filter(CharSequence source, int start,   
             int end, Spanned dest, int dstart, int dend) {   
               
             return source.length() < 1 ? dest.subSequence(dstart, dend)   
                                                : "";   
        }   
    } });  
        last_meal.setFilters(new InputFilter[] { new InputFilter() {   
            @Override  
                public CharSequence filter(CharSequence source, int start,   
                 int end, Spanned dest, int dstart, int dend) {   
                return source.length() < 1 ? dest.subSequence(dstart, dend)   
                        : "";   
            }   
        } }); 
        comments.setFilters(new InputFilter[] { new InputFilter() {   
            @Override  
                public CharSequence filter(CharSequence source, int start,   
                 int end, Spanned dest, int dstart, int dend) {   
                return source.length() < 1 ? dest.subSequence(dstart, dend)   
                        : "";   
            }   
        } });   
     
}  

    
 }

  (申明下,這個我是在壇子中看到的,本人測試有效) 這樣做就可以在java代碼中動態設置EditText的編輯狀態了,但這個無法解決用戶體驗的問題,軟鍵盤依然會打開,但無法輸入,但可以選擇內容。

通過這樣方式試試吧,自定義一個類繼承EditText,

如:

package custom.widget;  
  
import android.content.Context;  
import android.util.AttributeSet;  
import android.view.MotionEvent;  
import android.widget.EditText;  
  
public class CustomEditText extends EditText {  
    public CustomEditText(Context context,AttributeSet attrs) {  
        super(context,attrs);  
    }  
      
    @Override  
    public boolean onTouchEvent(MotionEvent event) {  
        // TODO Auto-generated method stub  
        return true;  
    }     
}  
  
//然后在頁面布局文件使用自定義的EditText  
<custom.widget.CustomEditText  
         android:layout_width="fill_parent"  
         android:layout_height="wrap_content"  
    /> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM