Android 系统EditText获取焦点并且设置相关信息

来源:互联网 发布:股票入门 知乎 编辑:程序博客网 时间:2024/06/05 12:35

任何的控件都是基于View类的,所以EditText的控件监听也是在View.java中实现的


1、在frameworks/base/core/java/android/view/View.java中注册广播接收填充的EditText信息


private Handler mscanHandler = new Handler(){

@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);


View mFocus = getRootView().findFocus();
//Log.i("
123","hava scan message "+mFocus);
if(mFocus !=null&&mFocus instanceof EditText){

EditText mEdittext = (EditText) mFocus;
if(mEdittext.getText().toString().isEmpty()){
mEdittext.setText(msg.getData().getString("result"));
}else{
//mEdittext.setText("data");
}
}
}

};


BroadcastReceiver scanReceiver = new BroadcastReceiver(){


@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String
testinfo = intent.getExtras().getString("result");

Message mMessage = new Message();
Bundle mBundle = new Bundle();
mBundle.putString("result", testinfo);
mMessage.setData(mBundle);
mscanHandler.sendMessage(mMessage);
}

};


private void init
testinfo(){


IntentFilter mIntentFilter = new IntentFilter("android.
test.info");


mContext.registerReceiver(
testReceiver, mIntentFilter);
}


在onFocusChanged函数中注册 inittestinfo()广播接收器


    protected void onFocusChanged(boolean gainFocus, @FocusDirection int direction,
            @Nullable Rect previouslyFocusedRect) {
        if (gainFocus) {
            sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
        } else {
            notifyViewAccessibilityStateChangedIfNeeded(
                    AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED);
        }
//add test focus code
if(gainFocus){
inittestinfo();
}

..........

.........

}

且在clearFocusInternal函数中 取消注册广播接收器

mContext.unregisterReceiver(scanReceiver);


测试在你的APK中可以发送广播看是否所有的EditText会变成12345

Intent mIntent = new Intent("android.test.info");
mIntent.putExtra("result", "12345");
sendBroadcast(mIntent);



原创粉丝点击