Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ScrollView内嵌套EditText导致EditText无法滑动

ScrollView内嵌套EditText导致EditText无法滑动

作者头像
wust小吴
发布于 2019-07-08 08:13:50
发布于 2019-07-08 08:13:50
1.1K00
代码可运行
举报
文章被收录于专栏:风吹杨柳风吹杨柳
运行总次数:0
代码可运行

最近也碰到这样的问题  搜索了网上一个答案  解决方法有两种,这个里面完成是照着别人的思路来,

第一种思路就是  把 EditText 放在 ScrollView里面,重新自定义一个ScrollView  

 那个代码不是很方便,我感觉他的自定义Scrollview里面的onInterceptTouchEvent这个方法不好,导致我们需要在实现的类中还需要去构造这样的ScrollView   不是很方面,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<strong><span style="font-size:18px;"><ScrollView  
       android:id="@+id/sv_scrollview"  
       android:layout_width="fill_parent"  
       android:layout_height="fill_parent"  
       android:fadingEdge="none"  
       android:scrollbars="none" >  
  
<LinearLayout  
           android:layout_width="fill_parent"  
           android:layout_height="fill_parent"  
           android:orientation="vertical" >  
  
  
<cn.ls.widget.ScrollviewEdit  
               android:id="@+id/sv_feedback"  
               android:layout_width="fill_parent"  
               android:layout_height="100dip"  
               android:layout_gravity="center"  
               android:fadingEdge="none"  
               android:scrollbars="none"  
               android:visibility="visible" >  
  
               <LinearLayout  
                   android:layout_width="fill_parent"  
                   android:layout_height="100dip"  
                   android:gravity="center"  
                   android:scrollbars="vertical" >  
  
                   <EditText  
                       android:id="@+id/et_feedback"  
                       android:layout_width="fill_parent"  
                       android:layout_height="wrap_content"  
                       android:layout_gravity="center"  
                       android:layout_marginLeft="13dip"  
                       android:layout_marginRight="13dip"  
                       android:clickable="true"  
                       android:enabled="false"  
                       android:focusable="false"  
                       android:gravity="top"  
                       android:scrollbars="vertical"  
                       android:singleLine="false"  
                       android:background="@null"  
                       android:text="" />  
  
                    
               </LinearLayout>  
           </cn.ls.widget.ScrollviewEdit>  
  
    </LinearLayout>  
   </ScrollView>  </span></strong>

自定义的scrollview

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<strong><span style="font-size:18px;">public class ScrollviewEdit extends ScrollView {  
  
    private static final String TAG = "ScrollviewEdit";     
    private ScrollView parent_scrollview;   
    public ScrollView getParent_scrollview() {  
        return parent_scrollview;  
    }  
    public void setParent_scrollview(ScrollView parent_scrollview) {  
        this.parent_scrollview = parent_scrollview;  
    }  
  
    public ScrollviewEdit(Context context) {  
        super(context);  
    }  
      
    public ScrollviewEdit(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  
  
    int currentY;  
    @Override  
    public boolean onInterceptTouchEvent(MotionEvent ev) {  
        LogUtils.i(TAG, "onInterceptTouchEvent--------");      
        if (parent_scrollview == null) {  
            return super.onInterceptTouchEvent(ev);  
        } else {  
            if (ev.getAction() == MotionEvent.ACTION_DOWN) {  
                // 将父scrollview的滚动事件拦截  
                currentY = (int) ev.getY();  
                setParentScrollAble(false);  
                LogUtils.i(TAG, "将父scrollview的滚动事件拦截-----");      
                return super.onInterceptTouchEvent(ev);    
            } else if (ev.getAction() == MotionEvent.ACTION_UP) {  
                // 把滚动事件恢复给父Scrollview  
                setParentScrollAble(true);  
                LogUtils.i(TAG, "把滚动事件恢复给父Scrollview-----");    
            } else if (ev.getAction() == MotionEvent.ACTION_MOVE) {  
            }  
        }  
        return super.onInterceptTouchEvent(ev);    
    }  
    /** 
     * 是否把滚动事件交给父scrollview 
     * @param flag 
     */  
    private void setParentScrollAble(boolean flag) {  
        parent_scrollview.requestDisallowInterceptTouchEvent(!flag);  
    }  
}  </span></strong>

连接地址:http://blog.csdn.net/yigelangmandeshiren/article/details/12168877

第二种思路就是让 EditText重新获取焦点,让父滚动的焦点暂时把权利叫给自己,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<strong><span style="font-size:18px;">import android.content.Context;
import android.graphics.PointF;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.EditText;

public class XWEditText extends EditText{
	private XWEditText mthis;

	public XWEditText(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		mthis = this;
		// TODO Auto-generated constructor stub
	}
	public XWEditText(Context context, AttributeSet attrs) {
		super(context, attrs);
		mthis = this;
		// TODO Auto-generated constructor stub
	}
	
//	private PointF c

	public XWEditText(Context context) {
		super(context);
		mthis = this;
		// TODO Auto-generated constructor stub
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent e) {
		if(e.getAction()==MotionEvent.ACTION_DOWN){
			
			//通知父控件不要干扰
			getParent().requestDisallowInterceptTouchEvent(true);
		}else if(e.getAction()==MotionEvent.ACTION_MOVE){
			
			//通知父控件不要干扰
			getParent().requestDisallowInterceptTouchEvent(true);
		}else if(e.getAction()==MotionEvent.ACTION_UP){
			
//			getParent().requestDisallowInterceptTouchEvent(true);
		}
		return super.onTouchEvent(e);
	}

}</span></strong>

第二种方法简单的多了,只需要在你需要使用的时候  用上就可以了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<strong><span style="font-size:18px;"><com.jarvis.views.XWEditText
                        android:id="@+id/pub_desc"
                        android:layout_width="0dp"
                        android:layout_height="match_parent"
                        android:layout_weight="3"
                        android:background="@null"
                        android:gravity="left"
                        android:hint="对您想找的工作做简要的描述"
                        android:padding="2dp"
                        android:textColor="@android:color/black"
                        android:textSize="16sp" /></span></strong>

就这样就解决问题了  你在对应的类中用EditText 或者XWEditText都是可以可以找到这个控件,然后不用做任何的设置,就跟EditText那样用就行了,

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年10月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
View的滑动冲突的分析和处理实践
文中有用到 Scroller 来实现弹性滑动,不了解的可以先看下 View的滑动实现方式。
103style
2022/12/19
5190
View的滑动冲突的分析和处理实践
Android事件分发 分析
Android事件分发 分析 什么是事件的 分发 用户通过屏幕与手机交互的时候,每一次点击、长按、移动等都是一个事件。 事件分发机制:某一个事件从屏幕传递各个View,由View来使用这一事件(消费是事件)或者忽略这一事件(不消费事件),这整个过程的控制。 事件分发的对象是谁 系统把事件封装为MotionEvent对象,事件分发的过程就是MotionEvent分发的过程。 事件类型 按下(ACTION _DOWN) 移动 (ACTION_MOVE) 抬起 (ACTION_UP) 取消 (AC
对话、
2022/02/22
3620
Android事件分发  分析
Android View滑动冲突全面解析-夯实基础
滑动冲突这件事我们日常开发中应该是经常见,在我刚学习Android的时候,viewPager 与 SlidingMenu 侧滑栏的冲突也是搞得我一头雾水,不知道该怎么去解决,所以经常会去采用问百度的做法,这样下来的结果就是没有自己的思想了。网上的解决方案也都千篇一律,因为大家都很聪明啊。
Petterp
2022/02/09
4640
Android View滑动冲突全面解析-夯实基础
Android点击EditText文本框之外任何地方隐藏键盘的解决办法
1,实现方法一:通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/traceroute_rootview" android:layout_width="fill_parent" android:layout_height="fi
庞小明
2018/03/07
1.6K0
Android ViewDragHelper及移动处理总结
概述 2013年谷歌i/o大会上介绍了两个新的layout: SlidingPaneLayout和DrawerLayout,现在这俩个类被广泛的运用。我们知道在我们实际的开发中往往会涉及到很多的拖动效果,而ViewDragHelper解决了android中手势处理过于复杂的问题。 其实ViewDragHelper并不是第一个用于分析手势处理的类,gesturedetector也是,但是在和拖动相关的手势分析方面gesturedetector只能说是勉为其难,其拓展性并不好。 为了方便大家的理解,我们
xiangzhihong
2018/02/05
1.5K0
Android ViewDragHelper及移动处理总结
android View事件分发实测
主要测试dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent方法调用流程。
毛大姑娘
2020/09/10
3290
android View事件分发实测
Android TouchEvent事件传递机制
本文从http://blog.csdn.net/morgan_xww/article/details/9372285和http://www.cnblogs.com/linjzong/p/4191891.html整理而来
提莫队长
2019/02/21
3750
Carson带你学Android:完美解决ScrollView与嵌套EditText的滑动冲突
mScrollView把事件消费掉了,没有传递到EditText,从而导致没法使得 EditText 响应事件
Carson.Ho
2022/03/24
5850
Carson带你学Android:完美解决ScrollView与嵌套EditText的滑动冲突
dispatchTouchEvent事件分发浅析(一)大体代码
TouchEventUtil:(打印的帮助类,简单过滤MotionEvent的种类)
dodo_lihao
2018/09/12
5800
Android:完美解决ScrollView与嵌套EditText的滑动冲突
mScrollView把事件消费掉了,没有传递到EditText,从而导致没法使得 EditText 响应事件
Carson.Ho
2020/06/16
2.7K0
ViewPager,ScrollView 嵌套ViewPager滑动冲突解决
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/52939127
程序员徐公
2018/09/17
5.8K0
ViewPager,ScrollView  嵌套ViewPager滑动冲突解决
android viewgroup事件分发机制
今天给大家代码ViewGroup事件分发的源码解析~~凡是自定义ViewGroup实现各种滑动效果的,不可避免的会出现很多事件的冲突,对ViewGroup事件分发机制的了解,也有益于大家了解冲突产生的原因,以及对冲突进行处理~ 1、案例 首先我们接着上一篇的代码,在代码中添加一个自定义的LinearLayout: package com.example.zhy_event03;   import android.content.Context;   import android.util.Attrib
xiangzhihong
2018/01/30
9760
Android - ViewDragHelper实现京东、淘宝拖拽详情
前言 这个内容是很早就好的,不知道后来怎么忘记发出来了,这不过年这几天没事给翻出来,就给放出来了。 好了,老规矩先上效果图。 要实现这个效果有三种方式: ① 手势 ② 动画 ③ ViewDrag
code_horse
2018/07/02
8640
相关推荐
View的滑动冲突的分析和处理实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验