package test.test;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
/**
* 不滚动的listView 即全部显示
*
* @author david
* @deprecated
* @see ComponentUtils.setListViewHeightBasedOnChildren
*/
@Deprecated
public class NoScrollListView extends ListView {
public NoScrollListView(Context paramContext) {
super(paramContext);
}
public NoScrollListView(Context paramContext, AttributeSet paramAttributeSet) {
super(paramContext, paramAttributeSet);
}
public NoScrollListView(Context paramContext,
AttributeSet paramAttributeSet, int paramInt) {
super(paramContext, paramAttributeSet, paramInt);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec,
MeasureSpec.makeMeasureSpec(MeasureSpec.UNSPECIFIED, 0));
ListAdapter listAdapter = getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
int height;
int footCount = getFooterViewsCount();
int headCount = getHeaderViewsCount();
int adapterCount = listAdapter.getCount();
int childCount = getChildCount();
Log.e("~~~~", "getChildCount():" + childCount + ",getAdapterCount():"
+ adapterCount);
Log.e("~~~~", "footCount:" + footCount + ",headCount:" + headCount);
for (int j = 0; j < childCount; j++) {
Log.e("all child ", "child :" + j + ",height:"
+ getChildAt(j).getHeight());
}
for (int i = 0; i < adapterCount; i++) { // listAdapter.getCount()返回数据项的数目
View listItem = null;
if (childCount > 0) // 只有childCount 存在时候才使用已有的子件直接计算
{
if (footCount > 0 && i >= adapterCount - footCount) {// 获取listItem
// footer部分
listItem = getChildAt((i - adapterCount) + childCount);
} else if (i >= childCount - footCount)
listItem = getChildAt(i + headCount + footCount); // 在listView内foothead的子项index都是前面的
else
listItem = getChildAt(i);
}
height = 0;
if (listItem == null) {
listItem = listAdapter.getView(i, null, this);
try {
listItem.measure(MeasureSpec.UNSPECIFIED,
MeasureSpec.UNSPECIFIED); // 计算子项View 的宽高
height = listItem.getMeasuredHeight();
} catch (Throwable t) {
t.printStackTrace();
}
} else
height = listItem.getHeight();
Log.v("TAG", "listAdapter row " + i + "height:" + height);
totalHeight += height; // 统计所有子项的总高度
}
// 总高度 每个item总高度 + 子项间隔总和 +头部缩进 + 底部缩进
totalHeight = totalHeight
+ (getDividerHeight() * (listAdapter.getCount() - 1))
+ getPaddingBottom() + getPaddingTop();
// Log.v(TAG, "params.height" + params.height);
// // listView.getDividerHeight()获取子项间分隔符占用的高度
//
// // params.height最后得到整个ListView完整显示需要的高度
setMeasuredDimension(getMeasuredWidth(), totalHeight);
}
}
分享到:
相关推荐
- 当一个ListView滚动时,在ScrollListener中计算滚动的距离,并相应地调整其他ListView的滚动位置。 - 注意同步滚动速度和方向,以保持联动的自然感。 在【测试请用1280*720模拟器】中,这是为了确保在不同...
在Android开发中,有时我们可能需要创建一个可以横向滚动的列表视图,这与传统的垂直滚动的ListView有所不同。本文将详细讲解如何实现“android 横向滚动listview”,并结合给定的`HorizontalListView.java`文件名,...
当ListView被嵌套在ScrollView中时,由于两者都具备滚动功能,就会产生冲突:用户可能无法确定哪个控件应该负责滚动,或者滚动行为可能不按预期进行。 解决这个问题的关键在于正确设置和管理这两个控件的滚动行为。...
在Android开发中,ListView是一种常用的控件,用于展示大量数据并支持滚动操作。"监听listview垂直滚动距离"是Android开发中的一个常见需求,它可以帮助开发者实现诸如无限滚动加载、顶部悬浮按钮(如“返回顶部”)...
在WPF(Windows Presentation ...通过以上方法,你可以解决ListView在没有Items时水平滚动条不显示的问题,同时保持良好的用户体验。对于具体实现,可以参考项目中的代码示例,结合上述理论知识进行调试和优化。
在Android开发中,ListView是一种非常常见的视图组件,它用于展示可滚动的列表数据。然而,常规的ListView是垂直滚动的,而“横向滚动的ListView”则是对这一基础组件的扩展,使得用户可以水平滑动浏览列表内容。...
当你需要实现一个类似新闻滚动条或者广告轮播的效果时,`ListView`的循环滚动显示功能就显得尤为重要。本篇文章将深入探讨如何在C#中实现ListView的循环滚动效果。 首先,我们要理解`ListView`的基本用法。`...
通过以上步骤,我们可以在不牺牲ScrollView和ListView功能的前提下,实现类似微信聊天页面的流畅滚动体验。这个过程可能需要对Android的触摸事件处理和滚动机制有深入理解,但通过实践,开发者可以更好地控制和优化...
对于横向滚动的需求,我们不能直接修改ListView的源码,而是需要创建一个新的自定义ViewGroup,这个自定义组件需要重写onMeasure()和onLayout()方法来实现水平布局和滚动。 标签"横向滚动"表明我们要处理的是水平...
这个“android demo,自定义支持横向滚动的ListView”正是为了解决这个问题,让我们深入探讨相关知识点。 首先,要实现横向滚动的ListView,我们需要了解并掌握以下几个关键点: 1. **自定义ViewGroup**: 自定义...
在Android开发中,常规的ListView是用于垂直展示数据列表的组件,但有时我们可能需要一个可以横向滚动的列表,这就是“横向滚动的ListView”或称为HoriListView的用武之地。这种视图允许用户水平滑动来查看更多的...
综上所述,解决Android ListView滚动布局错位的关键在于正确地管理视图类型,并在`getView()`方法中确保视图的复用符合数据的类型。同时,实现多布局时要保持逻辑清晰,避免混淆不同类型的视图。通过这些方法,你...
然而,"android listview 自动往上滚动"的效果,通常指的是ListView的自动回弹或者滚动动画,这种效果可以为应用增添一些动态的用户体验。 首先,实现ListView自动往上滚动的效果,主要涉及到以下知识点: 1. **...
再者,条目滚动带动画(Item Scroll Animation)为ListView增加了视觉吸引力。当用户滚动ListView时,每个条目可以有入场或退出动画,如淡入淡出、缩放等。这种效果可以通过自定义ListView的Adapter并在getView方法...
总之,"Android 完美的listview自动循环滚动"涉及到的关键技术点包括自定义Adapter、监听ListView滚动事件、数据的取模计算以及性能优化。通过这些技术,我们可以创建出一个流畅且具有循环滚动功能的ListView,为...
在Android应用开发中,我们经常需要实现ListView的自动滚动功能,这通常用于模拟滚动效果、展示通知或者实现自动轮播等效果。在本篇内容中,我们将深入探讨如何在Android中实现ListView的自动滚动。 首先,自动滚动...
然而,当在一个ScrollView内嵌套一个ListView时,常常会遇到一些问题,比如滚动冲突、布局高度计算错误等。这个问题是由于两个可滚动组件共存导致的,Android系统无法正确处理它们之间的交互。 首先,我们要理解...
为了监听滚动距离,我们需要在ListView上设置一个OnScrollListener,并在onScroll()方法中计算滚动距离。例如,如果我们要在滚动到列表底部时加载更多数据,可以这样实现: ```java listView.setOnScrollListener...
首先,我们要明白,Android原生的ListView并不支持水平滚动。要实现这个功能,我们需要使用HorizontalScrollView或者RecyclerView结合LinearLayoutManager。这两个组件都支持水平滚动,但RecyclerView在性能和可定制...
### 解决ListView滚动背景变黑问题 在Android应用开发中,`ListView`是常见的用于展示列表数据的组件。然而,在实际使用过程中,开发者可能会遇到一个常见的问题:当快速滚动`ListView`时,某些项目的背景会变成...