androidscrollview嵌套
❶ 如何在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就不會顯示不全了