ScrollView 嵌套EditText,导致EditText 文字过多,滑动不了。

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_gravity="center"android:layout_width="@dimen/guide_width"android:layout_height="wrap_content"><EditTextandroid:id="@+id/et_body"android:layout_width="wrap_content"android:layout_height="128dp"android:layout_below="@+id/tv_title"android:layout_marginLeft="24dp"android:layout_marginTop="20dp"android:layout_marginRight="24dp"android:background="@null"android:lineSpacingExtra="3.6dp"android:editable="false"android:text="@string/zz_net_warn"android:textColor="@color/color_common_text_primary"android:textSize="@dimen/font_size_medium__" /></ScrollView>

解决方法1:

给mEditText 设置一个OnTouchListener

mEditText.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View view, MotionEvent motionEvent) {
//                注释掉的是错误的示例 这个不能return myCanScroll  因为myCanScroll是true 的话, 这里就会消费掉时间,
//EditText 的onTouch  就不会执行了
//                boolean myCanScroll = view.canScrollVertically(1) || view.canScrollVertically(-1);
//                view.getParent().requestDisallowInterceptTouchEvent(myCanScroll);
//                return myCanScroll;boolean myCanScroll = view.canScrollVertically(1) || view.canScrollVertically(-1);//如果我们要处理 那么就告诉父亲不要拦截就行了view.getParent().requestDisallowInterceptTouchEvent(myCanScroll);// 一定要返回falsereturn false;}});

canScrollVertically 方法 解析

    /*** Check if this view can be scrolled vertically in a certain direction.** @param direction Negative to check scrolling up, positive to check scrolling down.* @return true if this view can be scrolled in the specified direction, false otherwise.*/public boolean canScrollVertically(int direction) {final int offset = computeVerticalScrollOffset();final int range = computeVerticalScrollRange() - computeVerticalScrollExtent();if (range == 0) return false;if (direction < 0) {return offset > 0;} else {return offset < range - 1;}}

表示当前view 能不能竖直方向滑动,-1 表示内容能不能向上滑动(其实手指是向下滑),1 表示内容能不能向下滑动。注意,一些子类重写了这个方法里面调用的computeVerticalScrollOffset ,比如ScrollView.

当ScrollView 的高度是wrap_content 的时候,这个方法恒返回false.因为高度是wrap_content,导致ScrollView 的高度就是子View 的高度,其实控件是不能滑动的,所以这个也返回false。

解决方法二:

public class MyEditTextView extends EditText {public MyEditTextView(Context context) {super(context);}public MyEditTextView(Context context, AttributeSet attrs) {super(context, attrs);}public MyEditTextView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overridepublic boolean onTouchEvent(MotionEvent event) {boolean canScroll = canScrollVertically(1) || canScrollVertically(-1);getParent().requestDisallowInterceptTouchEvent(canScroll);return super.onTouchEvent(event);}
}

自己重写一下onTouchEvent。在布局里面使用这个控件。

方案三:

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.fragment.TouchConflictFragment"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ScrollViewandroid:layout_width="match_parent"android:layout_height="200dp"android:id="@+id/my_scroll"><TextViewandroid:layout_width="match_parent"android:layout_height="200dp"android:text="@string/test"android:editable="false"android:id="@+id/edit_text3"/></ScrollView>      </LinearLayout></ScrollView>
myScroll.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {boolean b = v.canScrollVertically(1) || v.canScrollVertically(-1);v.getParent().requestDisallowInterceptTouchEvent(b);return false;}});

ScrollView 嵌套EditText 滑动冲突解决相关推荐

  1. ScrollView嵌套EditText联带滑动的解决办法

    本篇文章的相关内容需结合上文:从ScrollView嵌套EditText的滑动事件冲突分析触摸事件的分发机制以及TextView的简要实现和冲突的解决办法 在说完了如何解决ScrollView嵌套Ed ...

  2. scrollview嵌套listview 滑动事件冲突的解决方法

    scrollview嵌套listview 滑动事件冲突的解决方法 参考文章: (1)scrollview嵌套listview 滑动事件冲突的解决方法 (2)https://www.cnblogs.co ...

  3. Android之 如何解决ScrollView 和ListView滑动冲突的问题如何解决ScrollView can host only one direct child

    android 采用ScrollView布局时出现异常:ScrollView can host only one direct child. 解决办法:主要是ScrollView内部只能有一个子元素, ...

  4. PullToRefreshListView中嵌套ViewPager滑动冲突的解决

    PullToRefreshListView中嵌套ViewPager滑动冲突的解决 最近恰好遇到PullToRefreshListView中需要嵌套ViewPager的情况,ViewPager 作为头部 ...

  5. 关于ViewPager嵌套ViewPager左右滑动冲突解决方法

    情况如下,TabLayout+ViewPager+Fragment,其中一个Fragment里面又嵌套了一层TabLayout+ViewPager+Fragment,运行的时候出现了两个情况. 1.子 ...

  6. Android滑动冲突解决方法

    Android滑动冲突解决方法 滑动冲突 首先讲解一下什么是滑动冲突.当你需要在一个ScrollView中嵌套使用ListView或者RecyclerView的时候你会发现只有ScrollView能够 ...

  7. Android进阶必备:滑动冲突解决与事件分发机制(附视频讲解)这篇看完还不懂请寄刀片

    1.前言 Android学习一段时间,需求做多了必然会遇到滑动冲突问题,比如在一个ScrollView中要嵌套一个地图View,这时候触摸移动地图或者放大缩小地图就会变得不太准确甚至没有反应,这就是遇 ...

  8. Android ScrollView与 X5Webview+RecyclerView的滑动冲突解决

    要解决ScrollView嵌套的X5WebView.滑动.高度冲突,则首先要解决ScrollView与 X5Webview的滑动冲突, <ScrollView     android:layou ...

  9. Android滑动冲突解决方式(下拉刷新上拉加载更多,适配RecyclerView/ListView/ScrollView)

    一.Android事件的分发机制 这里需要了解下Andorid事件的分发机制.事件分发一般是针对一组事件,即ACTION_DOWN > ACTION_UP 或 ACTION_DOWN > ...

最新文章

  1. Go if _,ok:=range map; ok判断key是否在map中
  2. centos7安装DHCP服务器
  3. 单片机c语言必背代码_最适合单片机编程的高级语言,除了C语言,别无选择!...
  4. Python案例:四种方式编程求解一元二次方程
  5. Linux系统编程 -- 线程私有属性
  6. bzoj:2331: [SCOI2011]地板
  7. Conficker.AE病毒局域网扫描工具
  8. 丁昊 北大计算机,北大、清华共17人!2018自主招生等类型入选名单公示,苏州333人!...
  9. html+游戏转盘,javascript+HTML5 Canvas绘制转盘抽奖
  10. 英伟达账号为什么登录不了_n卡的geforce experience登录不了怎么办?
  11. 数据分享和开源软件有助于对抗新型冠状肺炎,开源布道师等;开源之道每周评论2020 03 16...
  12. 【LeetCode】Algorithms 题集(二)
  13. 三星ARM Cortex-A8 S5PV210(蜂鸟)简介
  14. Exchange Server 2013 运维系列——EMS实用命令收集(持续更新中...)
  15. Faceless —— 开源的匿名社交应用
  16. 智商情商哪个重要_高智商和高情商究竟哪个更重要?
  17. 搜狗拼音输入法无法打出汉字
  18. 为了caffe(四)学习人家的文章
  19. 据说最厉害的黑客,出自少林寺、这是为什么?
  20. 十字路口的年轻人,选大厂、国企还是公务员?

热门文章

  1. 4.QT4中的connect的实现
  2. 记录一下HALCON调用相机自带驱动加速采集速率
  3. CPD和DESCR文件查看
  4. python 进度条_Python小程序系列——动态进度条(1)
  5. java整数转二进制字符串_在Java中将int转换为二进制字符串表示形式?
  6. memcached客户端_对比Memcached和Redis,谁才是适合你的缓存?
  7. 基于 Express 与 Mongodb 的简易 实现一个多人 blog
  8. Redis Sentinel--运维管理
  9. 加锁查询 FOR UPDATE 解决表格查询极慢的问题
  10. Factory模式与Prototype模式的异同