最近在开发当中遇到一种需求,要根据某些条件来对EditText弹出键盘与否进行控制,本来想使用setFocusable(false)和setFocuseable(true)来控制,但是发现取消焦点再设置焦点后控件的焦点一闪就消失了。网上找了找资料才知道要用setFocusableInTouchMode,具体原理就不太知道了,上点代码方便自己记忆。
package com.Ador.input;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
public class TestInputActivity extends Activity {
int index = 0;
EditText et;
int inType;
Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
et.setFocusableInTouchMode(true);
et.setSelection(0);
return false;
}
});
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et = (EditText) findViewById(R.id.et);
et.setFocusableInTouchMode(false);
et.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(index == 0){
inType = et.getInputType(); // backup the input type
et.setInputType(1); // disable soft input
et.setFocusableInTouchMode(false);
et.clearFocus();
index = 1;
}else if(index == 1){
et.setInputType(inType); // restore input type
et.setFocusableInTouchMode(true);
et.requestFocus();
index = 0;
}
}
});