手机
当前位置:查字典教程网 >编程开发 >安卓软件开发 >android基础教程之android的listview与edittext冲突解决方法
android基础教程之android的listview与edittext冲突解决方法
摘要:最近遇到一个关于android软键盘的问题。在ListView中每个Item中都有个EditText,在最后的几个Item中,EditTex...

最近遇到一个关于android软键盘的问题。在ListView中每个Item中都有个EditText,在最后的几个Item中,EditText第一次点击界面还能向上弹出,正常显示,

但第二次点击时,软件盘就把最后的几个Item给正当住了。这样很影响用户体验的。

其实解决的办法只要想一下,我相信有经验的开发人员就能够想到,让软键盘在消失的时候让相应Item中的EditText消失焦点clearFouce();但是有个关键的问题,

就是在获得返回事件的时候,如果获得的事件不对那就不会达到想要的效果。这个back时间一定要是自定Layout中的back事件才可以。

直接上代码。

复制代码 代码如下:

<cn.test.systemSetting.MyLayout xmlns: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中所作的处理:

复制代码 代码如下:

package cn.test.systemSetting;

import com.********.R;

import android.content.Context;

import android.util.AttributeSet;

import android.view.KeyEvent;

import android.view.LayoutInflater;

import android.view.View;

import android.view.inputmethod.InputMethodManager;

import android.widget.EditText;

import android.widget.LinearLayout;

/**

*

* 针对设备管理键盘事件的处理

* divid小硕

*

* **/

public class MyLayout extends LinearLayout {

private Context context;

public MyLayout(Context context) {

super(context);

// TODO Auto-generated constructor stub

this.context=context;

LayoutInflater.from(context).inflate(R.layout.device_manager, this);//此处所加载的layout就是上面的xml,即它的名字就是device_manager.xml

}

public MyLayout(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

// TODO Auto-generated constructor stub

}

public MyLayout(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

}

@Override

public boolean dispatchKeyEventPreIme(KeyEvent event) {

// TODO Auto-generated method stub

if(context!=null){

InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);

if(imm.isActive() && event.getKeyCode() == KeyEvent.KEYCODE_BACK){

View view = DeviceManagerActivity.lv_data.getFocusedChild();

if(view!=null){

view.clearFocus();

}

}

}

return super.dispatchKeyEventPreIme(event);

}

}

主界面所采用的加载方式要是这样的:

复制代码 代码如下:

public class DeviceManagerActivity extends Activity implements OnClickListener{

public static ListView lv_data;

static DevMgrAdapter adapter;

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// 1.全屏

requestWindowFeature(Window.FEATURE_NO_TITLE); // 无标题

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

this.setContentView(new MyLayout(this));

init();

}

}

【android基础教程之android的listview与edittext冲突解决方法】相关文章:

Android 设置应用全屏的两种解决方法

android帮助文档打开慢的三种解决方法

android开发环境遇到adt无法启动的问题分析及解决方法

Android 工程内嵌资源文件的两种方法

android横竖屏切换不重启activity解决方案

android开发基础教程—SharedPreferences读写

Android动态添加View的问题解决方法

Android工程:引用另一个Android工程的方法详解

android之自定义Toast使用方法

更新android SDK 失败的解决方法

精品推荐
分类导航