android基础教程之android的listview与edittext冲突解决方法
最近遇到一个关于android软键盘的问题。在ListView中每个Item中都有个EditText,在最后的几个Item中,EditText第一次点击界面还能向上弹出,正常显示,
但第二次点击时,软件盘就把最后的几个Item给正当住了。这样很影响用户体验的。
其实解决的办法只要想一下,我相信有经验的开发人员就能够想到,让软键盘在消失的时候让相应Item中的EditText消失焦点clearFouce();但是有个关键的问题,
就是在获得返回事件的时候,如果获得的事件不对那就不会达到想要的效果。这个back时间一定要是自定Layout中的back事件才可以。
直接上代码。
<cn.test.systemSetting.MyLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/keyboardlayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/main_bg"
android:orientation="vertical">
<ListView
android:id="@+id/lv_data"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:cacheColorHint="#00000000"
android:transcriptMode="normal"
>
</ListView>
</cn.test.systemSetting.MyLayout>
自定义layout中所作的处理:
packagecn.test.systemSetting;
importcom.********.R;
importandroid.content.Context;
importandroid.util.AttributeSet;
importandroid.view.KeyEvent;
importandroid.view.LayoutInflater;
importandroid.view.View;
importandroid.view.inputmethod.InputMethodManager;
importandroid.widget.EditText;
importandroid.widget.LinearLayout;
/**
*
*针对设备管理键盘事件的处理
*divid小硕
*
***/
publicclassMyLayoutextendsLinearLayout{
privateContextcontext;
publicMyLayout(Contextcontext){
super(context);
//TODOAuto-generatedconstructorstub
this.context=context;
LayoutInflater.from(context).inflate(R.layout.device_manager,this);//此处所加载的layout就是上面的xml,即它的名字就是device_manager.xml
}
publicMyLayout(Contextcontext,AttributeSetattrs,intdefStyle){
super(context,attrs,defStyle);
//TODOAuto-generatedconstructorstub
}
publicMyLayout(Contextcontext,AttributeSetattrs){
super(context,attrs);
//TODOAuto-generatedconstructorstub
}
@Override
publicbooleandispatchKeyEventPreIme(KeyEventevent){
//TODOAuto-generatedmethodstub
if(context!=null){
InputMethodManagerimm=(InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm.isActive()&&event.getKeyCode()==KeyEvent.KEYCODE_BACK){
Viewview=DeviceManagerActivity.lv_data.getFocusedChild();
if(view!=null){
view.clearFocus();
}
}
}
returnsuper.dispatchKeyEventPreIme(event);
}
}
主界面所采用的加载方式要是这样的:
publicclassDeviceManagerActivityextendsActivityimplementsOnClickListener{
publicstaticListViewlv_data;
staticDevMgrAdapteradapter;
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
//1.全屏
requestWindowFeature(Window.FEATURE_NO_TITLE);//无标题
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
this.setContentView(newMyLayout(this));
init();
}
}
相关文章
- android bindservice方法,Android bindservice方法返回false
- android vlc 字幕乱码,VLC播放器中文字幕乱码问题解决方法[通俗易懂]
- Android通过jni调用本地c/c++接口方法总结
- android 复制控件,Android长按复制文本功能[通俗易懂]
- android线程间通信的几种方法_Android进程间和线程间通信方式
- 【错误记录】编译 Android 版本的 ijkplayer 报错 ( You must define ANDROID_NDK before starting. | 下载指定版本 NDK )
- 【错误记录】Android Studio 编译时 lint 检查报错 ( WARNING: DSL element ‘android.dataBinding.enabled‘ is obsolet )
- 【错误记录】Android 应用安全检测漏洞修复 ( StrandHogg 漏洞 | 设置 Activity 组件 android:taskAffinity=““ )
- android不同activity之间共享数据解决方法
- android开发环境遇到adt无法启动的问题分析及解决方法
- Android异步获取网络图片并处理导致内存溢出问题解决方法
- 基于Android中实现定时器的3种解决方法
- 将文件放到Android模拟器的SD卡中的两种解决方法
- Android将androidview的位置设为右下角的解决方法
- android获取照片的快照思路及实现方法
- Android游戏开发之Canvas画布的介绍及方法
- WAC启动Android模拟器transfererror:Read-onlyfilesystem错误解决方法
- android工程下不能运行javamain程序的解决方法
- Android开发中的9个常见错误和解决方法