當前位置:首頁 » 安卓系統 » androidscrollview嵌套

androidscrollview嵌套

發布時間: 2023-01-20 16:29:34

❶ 如何在ScrollView中嵌套ListView

單總結如下:
1.不要在ScrollView中嵌套ListView a.用一個LinearLayout來代替ListView。裡面的item通過addView添加進去。 b.不用ScrollView,整個界面用一個ListView。ListView上面和下面的內容通過addHeaderView和addFooterView添加到ListView里。 有時候採用這種方式不錯的。
2.非要在ScrollView中嵌套一個ListView。 a.繼承ListView重寫一個類,在ListView的onMeasure方法里自己來計算ListView的高度。 b.在代碼中通過ListView的adapter中item的個數計算得出ListView應該的高度,然後通過setLayoutParam來指定ListView的高度。 但是上面所說的兩種在ScrollView中嵌套ListView的方法都存在一個通用的bug: 當游標在ListView中移動時ScrollView不能一起滾動 所以,在android的開發中還是要盡最大的努力去避免在ScrollView中嵌套ListView

❷ android scrollview 嵌套listview 不滑動

不滑動的原因是有沖突,你必須自定義一個LIstView才行,你參考下面的代碼就行了

public class NonScrollListView extends ListView {
public NonScrollListView(Context context) {
super(context);
}
public NonScrollListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public NonScrollListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}

❸ android scrollview 嵌套webview 有其他方式沒

Android中WebView用來載入html頁面,自帶滑動效果。ScrollView同樣也是自帶滑動效果,在項目中如果需要WebView和一些其他view比如TextView一起滑動的話就必須外面嵌套一層ScrollView,這時問題就來了,嵌套之後ScrollView的滑動和WebView的滑動就會有沖突,WebView的滑動不流暢。下面就是解決方案:
自定義一個ScrollView
public class MyScrollView extends ScrollView {
private GestureDetector mGestureDetector;
View.OnTouchListener mGestureListener;

public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(context, new YScrollDetector());
setFadingEdgeLength(0);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
}

// Return false if we're scrolling in the x direction
class YScrollDetector extends SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if (Math.abs(distanceY) > Math.abs(distanceX)) {
return true;
}
return false;
}
}
}

上面代碼中onInterceptTouchEvent方法是關鍵,重寫這個方法使如果ScrollView有touch事件時不被攔截,這樣只要ScrollView有touch事件優先處理,這樣就保證了滑動的流暢。
之後就在自己的xml布局文件里用MyScrollView代替ScrollView來布局就ok了。如:
<com.boohee.widgets.MyScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/main_bg"
android:layout_marginTop="@dimen/default_shadow_margin" >

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="180dp" >

<android.support.v4.view.ViewPager
android:id="@+id/vp_top_show"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />

<LinearLayout
android:id="@+id/dot_layout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:padding="10dp" >
</LinearLayout>
</RelativeLayout>

<WebView
android:id="@+id/wv_show"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layerType="software"
android:scrollbars="none" />
</LinearLayout>
</com.boohee.widgets.MyScrollView>

❹ android scrollview 嵌套 viewpager 嵌套 gridview 沖突問題

解決滑動沖突在子控制項中注冊一個onTouch事件然後在裡面增加一行代碼:getParent().(true);表示告訴父控制項,不要處理這個Touch事件

❺ android ScrollView嵌套不顯示

你的報錯:boolean java.lang.String.equals(java.lang.Object)' on a null object reference;前面string值為null,調用equals方法出現空指針,看下string對象為什麼為null,跟ScrollView嵌套不顯示沒關系。

❻ Android高級ui13-nestedscrollview嵌套滾動機制

學習筆記,整理中;

面:

android.overridePathCheck = true

自己思路整理:

1、MyNestedScrollChildLextends LinearLayoutimplements NestedScrollingChild

onTouchEvent主要處理此方法,在action_down中 startNestedScroll開始找尋父級的嵌套滾動view; 在action_move中dispatchNestedPreScroll 先分發給父級消費,返回true父級消費完再回來。如果需要二次問詢則不要pre,還是先問再回來;action_up處理stopNestedScroll  以及fling 慣性滾動,邏輯類似

2、MyNestedScrollParentLextends LinearLayoutimplements NestedScrollingParent

onNestedPreScroll主要處理此方法,注意要處理消費和滾動,並且過度滾動情況

3、NestedScrollingParentHelper helper --裡面已處理大部分情況

---------------------------------------------------------------------------------------------------------

摘要:

嵌套滑動機制

NestedScrollView  屬於MD控制項

分析嵌套滑動機制 原理

事件序列

down -> ..... move  -> up/cancel

1. view down沒有消費,那麼後續的move  沒辦法再接收到了

分發

activity -> viewgroup -> view

消費

view -> viewgroup -> activity

嵌套滑動

> mTouchslop 最小滑動距離

canScrollVertically(-1) <0

scrollBy 移動屏幕

傳統的事件沖突解決方案

OverScroller

為什麼需要

嵌套滑動機制 並沒有改變事件分發機制

NestedScrollingParentLayout extends LinearLayout implements NestedScrollingParent

NestedScrollingParent介面 可滑動的viewgroup 充當父view

NestedScrollingChild介面                    充當子view

孔融讓梨

1.  -》 父親  dispatchNestedPreScroll

            1. 全部吃了

2. 咬一口  還要剩餘

2. 孔融再吃

            1. 全部吃完

            2. 咬兩口  還要剩餘

-》  父親 dispatchNestedScroll

          1. 全部吃了

  2. 又咬一口  還要剩餘

2. 孔融再吃2 

            1. 全部吃完

int type 事件類型:

        touch

        fling

NestedScrollView

1. 梳理了事件分發機制

2. 為什麼需要嵌套滑動機制 解決傳統事件滑動機制的bug

3. 介紹了NestedScrollingParent NestedScrollingChild

NestedScrollingChildHelper

NestedScrollingParentHelper

內容:

❼ Android Scrollview 嵌套 ListView 顯示不全的原因和解決方法

ScrollView 繼承 FrameLayout,FrameLayout -> onMeasure()

ViewGroup -> measureChildWithMargins()

ScrollView 重寫了 measureChildWithMargins() 方法

ListView -> onMeasure()

❽ 如何在ScrollView嵌套另一個ScrollView

android開發中ScrollView嵌套ScrollView是android最常用的功能,每一位學習安卓培訓的都應該對它們的原理有深入的了解,我專門整理出幾個實例, 為大家解析一下android培訓中ScrollView嵌套ScrollView的原理。
大家好,眾所周知,android 里兩個相同方向的ScrollView是不能嵌套的,那要是有這樣的需求怎麼辦?(這個需求一般都是不懂android的人提出來的)
難道就真的不能嵌套嗎? 當然可以,只要你再寫一個ScrollView,在裡面做點腳,它就支持嵌套了。
目前做的這個只支持兩個ScrollView嵌套,兩個以上還有待改進,能套兩個就已經能滿足很多需求了,呵呵,另外現在只做了縱向scrollview的支持,橫向的還沒來的急做哦。
package com.sun.shine.study.innerscrollview.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ScrollView;
public class InnerScrollView extends ScrollView {
/**
*/
public ScrollView parentScrollView;
public InnerScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
private int lastScrollDelta = 0;
public void resume() {
overScrollBy(0, -lastScrollDelta, 0, getScrollY(), 0, getScrollRange(), 0, 0, true);
lastScrollDelta = 0;
}
int mTop = 10;
/**
* 將targetView滾到最頂端
*/
public void scrollTo(View targetView) {
int oldScrollY = getScrollY();
int top = targetView.getTop() - mTop;
int delatY = top - oldScrollY;
lastScrollDelta = delatY;
overScrollBy(0, delatY, 0, getScrollY(), 0, getScrollRange(), 0, 0, true);
}
private int getScrollRange() {
int scrollRange = 0;
if (getChildCount() > 0) {
View child = getChildAt(0);
scrollRange = Math.max(0, child.getHeight() - (getHeight()));
}
return scrollRange;
}
int currentY;
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (parentScrollView == null) {
return super.onInterceptTouchEvent(ev);
} else {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
// 將父scrollview的滾動事件攔截
currentY = (int)ev.getY();
setParentScrollAble(false);
return super.onInterceptTouchEvent(ev);
} else if (ev.getAction() == MotionEvent.ACTION_UP) {
// 把滾動事件恢復給父Scrollview
setParentScrollAble(true);
} else if (ev.getAction() == MotionEvent.ACTION_MOVE) {
}
}
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
View child = getChildAt(0);
if (parentScrollView != null) {
if (ev.getAction() == MotionEvent.ACTION_MOVE) {
int height = child.getMeasuredHeight();
height = height - getMeasuredHeight();
// System.out.println("height=" + height);
int scrollY = getScrollY();
// System.out.println("scrollY" + scrollY);
int y = (int)ev.getY();
// 手指向下滑動
if (currentY < y) {
if (scrollY <= 0) {
// 如果向下滑動到頭,就把滾動交給父Scrollview
setParentScrollAble(true);
return false;
} else {
setParentScrollAble(false);
}
} else if (currentY > y) {
if (scrollY >= height) {
// 如果向上滑動到頭,就把滾動交給父Scrollview
setParentScrollAble(true);
return false;
} else {
setParentScrollAble(false);
}
}
currentY = y;
}
}
return super.onTouchEvent(ev);
}
/**
* 是否把滾動事件交給父scrollview
*
* @param flag
*/
private void setParentScrollAble(boolean flag) {
parentScrollView.(!flag);
}
}

❾ Android中Scrollview布局中的嵌套的布局可以實現點擊事件嗎

當然可以,給View設置點擊事件只需要調用setOncCickListener()方法,然後重寫onClick方法即可。

❿ 關於android ,ScrollView嵌套listview的問題

你發錯分類了吧,這個是.net分類
不過我可以回答你
listview的高度可以用內容來撐,為了美觀的話可以給上下左右設置marign

另外你可以給listview一個下margin就不會顯示不全了

熱點內容
登陸認證失敗請檢查伺服器地址 發布:2025-05-20 07:06:55 瀏覽:831
無限分類實現php 發布:2025-05-20 06:57:40 瀏覽:681
數據結構c語言版嚴蔚敏李冬梅 發布:2025-05-20 06:55:05 瀏覽:449
iphone快捷訪問 發布:2025-05-20 06:55:05 瀏覽:929
如何加密硬碟分區 發布:2025-05-20 06:52:29 瀏覽:363
反編譯gd 發布:2025-05-20 06:52:23 瀏覽:838
java源碼知乎 發布:2025-05-20 06:47:59 瀏覽:483
dos解壓縮命令 發布:2025-05-20 06:47:57 瀏覽:639
安卓傳數據給蘋果的軟體叫什麼 發布:2025-05-20 06:42:48 瀏覽:804
怎麼樣盤解壓力 發布:2025-05-20 06:37:08 瀏覽:85