重写ListView onMeasure后,最后一条item显示不全的问题

当我们需要在ScrollView中嵌套ListViewGridView时,需要重写onMeasure()方法,从而解决嵌套时的显示不全问题,这个方法显然是有效的。

@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
				MeasureSpec.AT_MOST);
		super.onMeasure(widthMeasureSpec, expandSpec);
	}

这样就让ListView或GridView全部显示了。


但是当我们嵌套ScrollView的时候,容易产生另外一个我们以为是listview的问题的问题,就是ListView的最后一条item显示不全,相信很多人都像我一样以为问题出在了listview,

但其实问题是处在了ScrollViewScrollView只能包含一个子节点,当我们给这个子节点设置android:layout_marginTop="xdp"时,之后,上面多出来了xdp的边距,但是这却导致了下面少了xdp,导致该滚动条拖不到最底端,就会出现最后一条item显示不全,解决的办法就是不要在第一层子节点设置marginTop,如果需要可以在下一层进行设置。


最后。。。希望对看到的人有所帮助。

发布了14 篇原创文章 · 获赞 1 · 访问量 1万+
展开阅读全文

CoordinatorLayout+RecyclerView,最后一项显示不全

07-29

``` <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.design.widget.CollapsingToolbarLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:layout_width="match_parent" android:layout_height="200dp" android:scaleType="centerCrop" app:layout_collapseParallaxMultiplier="0.85" android:src="@mipmap/bg" app:layout_collapseMode="parallax" /> <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="45dp" android:background="@android:color/white" app:contentInsetStart="0dp" app:layout_collapseMode="pin"> <TextView android:textColor="#159fff" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="标题栏" android:textSize="18sp" /> </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout> <TextView android:layout_width="match_parent" android:layout_height="40dp" android:background="@android:color/holo_orange_light" android:gravity="center" android:text="假装是个搜索栏" android:textColor="@android:color/white" app:layout_scrollFlags="exitUntilCollapsed" /> </android.support.design.widget.AppBarLayout> <android.support.v7.widget.RecyclerView android:id="@+id/rv" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.CoordinatorLayout> ``` xml布局如图,recyclerview的最后一项只显示了半截,recyclerview的布局管理器就是一个LinearLayoutManager,recyclerview布局很简单,都是单一item。 问答

Android自定义控件在scrollview中设置高度不起作用,已经重写了 onMeasure方法

03-15

布局: <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/title_template" android:layout_width="match_parent" android:text="hahahah" android:layout_height="700dp" /> <com.tky.mpchart.View.BarChart2View android:id="@+id/fl_chart2" android:layout_below="@+id/title_template" android:layout_width="match_parent" android:layout_height="600dp" /> </RelativeLayout> </ScrollView> 自定义控件: protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); this.setMeasuredDimension(this.measureWidth(widthMeasureSpec), this.measureHeight(heightMeasureSpec)); } private int measureWidth(int measureSpec) { int result = 100; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if(specMode == 1073741824) { result = specSize; } else if(specMode == -2147483648) { result = Math.min(result, specSize); } return result; } private int measureHeight(int measureSpec) { int result = 100; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if(specMode == 1073741824) { result = specSize; } else if(specMode == -2147483648) { result = Math.min(result, specSize); } return result; } 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览