在ListView中嵌套EditText,EditText内容过多需要滚动的问题
来源:互联网 发布:大数据属于哪个专业 编辑:程序博客网 时间:2024/05/18 04:03
最近在做项目,需要在ListView中点击item展开一个固定高度的EditText,不能编辑,如果内容过多就需要滚动.但是发现EditText的滚动跟ListView的滚动冲突了
在这里我参考了这个文章: http://blog.csdn.net/goodlixueyong/article/details/41172465
原理是当点到EditText上的时候,就让EditText获取焦点,屏蔽Listview的滚动,当手指离开EditText的时候,恢复ListView的滚动.但是这会有个问题,影响了用户体验,就是如果内容不多的时候,EditText还是那么高,点在上面的时候,就无法让ListView滚动的.所以这里我就给每个EditText加上一个判断内容高度的处理.如果内容过高,EditText可滚动的时候,就按上去就滚动EditText,如果内容不多或者按在EditText外面的时候,就滚动ListView.
以下是关键代码:
ViewTreeObserver vto = holder.et_comment.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { holder.et_comment.getViewTreeObserver().removeGlobalOnLayoutListener(this); editText_height=holder.et_comment.getHeight(); if(line_height==0){ Paint textPaint=new Paint(Paint.ANTI_ALIAS_FLAG); textPaint.setTextSize(holder.et_comment.getTextSize()); LogUtil.v(TAG, "editText_height:"+editText_height+" text size:"+holder.et_comment.getTextSize()); FontMetrics fontMetrics = textPaint.getFontMetrics(); line_height=(int) Math.abs(fontMetrics.top-fontMetrics.bottom); } int contentHeight=holder.et_comment.getLineCount()*line_height; if(contentHeight>editText_height){ editTextTouchList.put(position, true); LogUtil.e(TAG, "contentHeight:"+contentHeight+" pos:"+position+" line:"+holder.et_comment.getLineCount()+" 要控 制"); }else{ editTextTouchList.put(position, false); LogUtil.v(TAG, "editText_height:"+editText_height+" pos:"+position+" line:"+holder.et_comment.getLineCount()+" 不用控制----"); } } });
holder.et_comment.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.et_comment: if(editTextTouchList.containsKey(position)){ if(editTextTouchList.get(position)){ v.getParent().requestDisallowInterceptTouchEvent(true); switch (event.getAction()) { case MotionEvent.ACTION_UP: v.getParent().requestDisallowInterceptTouchEvent(false); break; } } } } return false; }});
然后是重写Edittext的onTouch事件,如果这个EditText被记录为需要滚动的,就把他的parent(就是listview)的touch事件给先拦截处理了.如果手指up了,就让他恢复原状.
这样的话就可以让过多内容的EditText滚动,按着内容不多的EditText的时候,就照样可以滚动ListView了.
*****忘了补充说明下,由于重写了onTouch事件,在某些机型上可能会影响长按出那个"复制","黏贴"的选项.这个要留意.由于我的需求是不能编辑,所以没影响,如果你的需要编辑,这个可能要考虑下怎么改******
1 0
- 在ListView中嵌套EditText,EditText内容过多需要滚动的问题
- ListView中嵌套的EditText不能滚动的问题
- ListView、ScrollView中嵌套的EditText不能滚动的问题
- 解决ScrollView中嵌套EditText,EditText不能滚动的问题
- Android ListView中嵌套EditText,随着软件盘的出现和消失,EditText焦点和内容混乱的问题
- ListView中嵌套EditText,直接在EditText输入,需要注意几点
- ListView中嵌套EditText
- ListView中使用EditText(解决EditText焦点丢失、保存数据以及滚动冲突的问题)
- Android ListView 中嵌套EditText
- 在ListView中EditText丢失光标问题
- 在edittext中输入内容,动态匹配更新 listview的数据(EditText中边输入,listView边更新)
- EditText在ListView中无法被选中的问题
- Android—在listview中edittext获取焦点的问题
- 如何在ScrollView中嵌套ListView、ScrollView、EditText、GridView
- 如何在ScrollView中嵌套ListView、ScrollView、EditText、GridView
- 在ListView中修改EditText的值
- 在ListView中修改EditText的值
- ListView嵌套EditText导致软键盘闪退的问题
- IOS入门篇(一)
- 正则表达式验证只能输入中文
- 一个TextView 设置两种字体颜色和大小
- 2D横版地图碰撞实现
- Python中logging模块的使用
- 在ListView中嵌套EditText,EditText内容过多需要滚动的问题
- continue、break、return的区别
- 定义Fibonacci数列如下: / 0 n=0 f(n)= 1 n=1 \ f(n-1)+f(n-2) n=2 输入n,用最快的方法求该数列的第n项。
- AB是一家?VAO与VBO
- intellij+maven 非插件形式使用tomcat
- xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)
- c语言中的函数的定义以及相关的调用、嵌套、递归以及和数组的关系
- maven联通网络下中央仓库不能访问的解决办法
- linux下用core和gdb查询出现"段错误"的地方