当前位置:首页 » 安卓系统 » 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 05:25:00 浏览:925
小米自动上传 发布:2025-05-20 05:06:06 浏览:624
王者荣耀引流脚本 发布:2025-05-20 05:06:03 浏览:485
无人深空pc需要什么配置 发布:2025-05-20 04:55:17 浏览:614
可编程式恒温恒湿试验箱 发布:2025-05-20 04:54:34 浏览:367
visibilityandroid 发布:2025-05-20 04:54:26 浏览:699
android磁场传感器 发布:2025-05-20 04:50:46 浏览:828
python经典编程题 发布:2025-05-20 04:42:33 浏览:782
xp电脑访问win7 发布:2025-05-20 04:41:59 浏览:617
金融的配置是什么 发布:2025-05-20 04:41:07 浏览:466