Android ScrollView巢狀ScrollView,並且巢狀的ScrollView超過螢幕部分
問題:我在ScrollView裡面嵌套了一個ScrollView,巢狀的ScrollView超出了螢幕顯示部分,需要向下滑動才能看到,當滑動下去找到巢狀的ScrollView時,滑動時並不能觸發它的onTouch()事件。
解決思路:
1. 先是參考的http://mengsina.iteye.com/blog/1707464這一篇文章,主要利用了在onTouch()事件裡面寫v.getParent().requestDisallowInterceptTouchEvent(true); 這種方法,讓父ScrollView不攔截Touch事件,自己來處理。
親自實驗了這個方法,當巢狀的ScrollView不超出螢幕時是可以用的,可是當巢狀的ScrollView超出螢幕時,就不可以了。
程式碼如下,當touch子ScrollView時,打印出”觸摸了第2個ScrollView”,然而並沒有成功,結果在後面,全都是列印的”觸摸了第1個ScrollView”:
MainActivity.java->onCreate():
//父ScrollView
svParent = (ScrollView) findViewById(R.id.sv_parent);
svParent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
ViewParent parent = findViewById(R.id.sv_child).getParent();
parent.requestDisallowInterceptTouchEvent(false ); //允許父類截斷
System.out.println("觸摸了第1個ScrollView");
return false;
}
});
//子ScrollView
svChild = (ScrollView) findViewById(R.id.sv_child);
svChild.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
ViewParent parent1 = v.getParent();
parent1.requestDisallowInterceptTouchEvent(true); //不允許父類截斷
System.out.println("觸摸了第2個ScrollView");
return false;
}
});
結果截圖:
從這個結果來看,Touch事件,沒有傳遞到巢狀的ScrollView上來,應該是被上層的ViewGroup截獲,或者是傳下去被下面的View消費掉了,沒再傳上來。
2.接下來,就是想讓這個巢狀的ScrollView截獲傳遞過來的Touch事件,不再分發下去了。所以想到重寫ScrollView的onInterceptTouchEvent(),讓它返回true,讓這個巢狀的ScrollView截獲這個Touch事件(注意:onInterceptTouchEvent()返回true,表示截獲這個Touch事件;返回false,表示不搭理這個Touch事件)。
自定義ScrollView CustomScrollView.java:
package com.tudou.scrollviewnested;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ScrollView;
/**
* Created by Administrator on 2016-08-14.
*/
public class CustomScrollView extends ScrollView {
public CustomScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
System.out.println("第2個ScrollView:dispatchTouchEvent");
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
System.out.println( "第2個ScrollView: onInterceptTouchEvent: ");
// return super.onInterceptTouchEvent(ev);
boolean flag = false;
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
flag = super.onInterceptTouchEvent(ev);
break;
case MotionEvent.ACTION_MOVE:
flag = true;
break;
}
return flag;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
System.out.println( "第2個ScrollView: onTouchEvent: ");
return super.onTouchEvent(ev);
}
}
在上面的程式碼裡面可以看到,onInterceptTouchEvent()函式,我讓它直接返回了true。再看一下結果,看看呼叫順序哈。
結果截圖:
從結果上可以看出這幾個函式的呼叫順序:
1. 是CustomScrollView裡面的dispatchTouchEvent()
2. 是CustomScrollView裡面的onInterceptTouchEvent()
3. 是MainActivity裡面的svChild.setOnTouchListener->onTouch()事件
4. 是CustomScrollView裡面的onTouchEvent()
^_^ OK~~~~~~~
相關推薦
echarts中國地圖上顯示柱狀圖,並且柱狀圖可點選
先放效果圖~~點選之後~~(資料和標題可動態變化)話不多說,直接上程式碼<link rel="shortcut icon" href="${ctx}/static/img/favicon.ico"> <link rel="stylesheet" href="
Android ScrollView巢狀ScrollView,並且巢狀的ScrollView超過螢幕部分
問題:我在ScrollView裡面嵌套了一個ScrollView,巢狀的ScrollView超出了螢幕顯示部分,需要向下滑動才能看到,當滑動下去找到巢狀的ScrollView時,滑動時並不能觸發它的onTouch()事件。 解決思路: 1. 先是參考的h
python關於字典巢狀字典,列表巢狀字典根據值進行排序
python 對於字典巢狀字典, 列表巢狀字典排序 例:列表巢狀自字典:d = [{"name": '張三', 's': 68}, {'name': '李四', 's': 97}] 對於列表巢狀字典可以使用python的sorted()方法,也可以使用list的sort()方法: sorted方法可接受
android ScrollView中巢狀GridView,ListView只顯示一行的解決辦法
注:本文是由網上大神分享的解決方案彙集而成 方法一: 重寫ListView、GridView: 重寫ListView: public class MyListView extends ListView { public MyListView(Context contex
android中關於使用scrollview巢狀LinearLayout,頁面滾動條不到底的解決方法
在android中編寫佈局一般會用到scrollview巢狀LinearLayout,使頁面可以自適應其高度。但是有的機型頁面可以顯示全;有的機型頁面顯示不全,滾動條怎麼也滾動不到底部,如下圖所示: 原xml程式碼: <ScrollView andr
Android 事件分發實踐(一),解決ScrollView巢狀ListView滑動的問題
需要在ScrollView裡面巢狀一個ListView,讓ScrollView和它裡面的ListView都能滑動(ListView寬度沒有佔滿ScrollView),先貼上佈局程式碼: <com.example.xujiang.viewlearn.tou
ScrollView巢狀EditText,導致EditText顯示多行時滑動失效的問題
ScrollView巢狀EditText,這會有什麼問題呢,我這裡說的是當EditText內輸入多行內容,當EditText所在佈局不夠的時候,必然需要滑動檢視輸入的所有內容。可是當我們把EditText放在ScrollView裡面的時候,會發現EditText的滑動失效了。 原因就
iOS scrollView巢狀tableView,可同時滑動
效果圖: 這個頁面可以分成三個部分:最上面為view,可以放廣告等效果,中間是segment選項,下面的部分可滑動顯示,應使用scrollView,根據選項個數迴圈建立tableView。 建立scrollView,根據segment的個數建立tableView
ScrollView巢狀ListView,顯示不全和位置不是頂部的解決辦法
(1)首先寫一個listview的頁面,用ScrollView進行巢狀,注意ScrollView裡面只能有一個佈局屬性,多個可以用Linearout進行包含 <?xml version="1.0" encoding="utf-8"?> <RelativeL
ScrollView巢狀ListView,listItem.measure(0,0);報空指標異常NullPointerException
1: SrollView巢狀ListView時顯示不全問題及ListView高度問題: 直接上程式碼,使用以下函式解決此問題: public void setListViewHeightOnChildren(ListView listView) {
Android 混排效果之 ScrollView 巢狀 RecyclerView 巢狀gridview 實現listview 巢狀gridview 效果
RecyclerView 出現以後 很受大家歡迎 漂亮流暢的列表 簡單的操作 可以幫我們完成很多的列表 但是有一種listview 巢狀gridview 的效果 目前還是需要巢狀才能完成 現在就簡單說一下我的思路 本人的需求是例如手機淘寶頁 本人使用老套的實現模
ScrollView內部巢狀Recyclerview,防止recyclerview自動獲得焦點
在寫一個ScrollView 巢狀Viewpager和RecyclerView的佈局時,RecyclerView老是自動獲得焦點然後在ScrollView 內部上下自動滾動,嘗試了在Scroll
ScrollView巢狀Listview,你會遇到的問題(1)!
做開發的時候,把兩個都能滑動的控制元件(同方向滑動),總會遇到滑動事件衝突的狀況,有時候會滑動失效,有時候會顯示不正常。這裡講講ScrollView巢狀Listview可能會出現的問題。 問題描述: <ScrollView android:layout_
ScrollView巢狀RecyclerView,RecyclerView總是把它上面的控制元件頂出頁面(頁面出現自己滾動)
ScrollView巢狀RecyclerView,當我離開當前頁面,然後又回來時,RecyclerView就會把它上邊的控制元件都擠出頁面,它顯示在頁面最上邊。 原因應該是RecyclerView搶了焦點,只需要把ScrollView中最上邊的那個控制元件加上幾句程式碼
GridView巢狀在ViewPager中,ViewPager巢狀在ScrollView中不顯示
1.問題描述 ViewPager中的page是GridView,ViewPager巢狀在ScrollView中,ViewPager設定高度為MATCH_PARENT或者WRAP_CONTENT都不顯示。 2.解決方法 2.1 方法1 網上提出的解
解決Scrollview巢狀Recyclerview,Gridview等出現內容顯示不全等為
在自定義View和ViewGroup的時候,我們經常會遇到int型的MeasureSpec來表示一個元件的大小,這個變數裡面不僅有元件的尺寸大小,還有大小的模式。 這個大小的模式,有點難以理解。在系統中元件的大小模式有三種: 1.精確模式(MeasureSpec.EXAC
ScrollView巢狀ListView,載入大量資料,介面卡頓問題的探討
之前使用ScrollView巢狀ListView,解決ScrollView巢狀ListView,列表項高度不同,顯示不全的問題,現在發現一個問題,因為在ListView中計算各個列表項的高度,所以ListView實際上是全部展開的,這樣的話,不能使用ListView重用的機
ScrollView+Fragment+ListView巢狀ListView,麻麻再也不用擔心我不會寫巢狀
前言 之前寫了一篇文章 android ListView/GridView與ScrollView巢狀的滑動衝突解決 介紹瞭如何解決ScrollView與AdapterView的巢狀,但是沒有給出demo,那是因為那些程式碼比較多,而且是在手頭的專案裡,業
Android開發中,Fragment巢狀Fragments遇到的問題
Fragment,簡稱碎片,是Android 3.0(API11)提出的,為了相容低版本,support-v4庫中也開發了一套Fragment API,最低相容Android 1.6。 Fragment是依賴於Activity的,不能獨立存在的。 一個Acti
Android 多層fragment 巢狀時,viewPager不顯示的問題
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/zkll200/article/details/73692518 先看一段錯誤程式碼,這段程式碼寫在一個 Fragment 中: private void initVi