一级ā片在线观看播放|97超爽人妻免费视频|国产精品免费看久久久网|国产综合无码免费一区二区|亚洲制服丝袜日韩熟女中文|欧美精品一区二区高清在线|国产一区二区波多野结衣av|裸体丰满少妇做受久久99精品

燚軒科技 助力中小型企業(yè)

關(guān)注行業(yè)新聞 把握時(shí)代脈搏

安卓app開(kāi)發(fā)中解決recycleview 和 scollview 嵌套 問(wèn)題

app開(kāi)發(fā)問(wèn)題,鄭州app開(kāi)發(fā) 2018-03-07 4248

有時(shí)候想要recycleview 和 scollview 嵌套 并且全部展開(kāi)recycleview,這樣的app技術(shù)無(wú)疑是很多人頭疼的,那么下面鄭州app開(kāi)發(fā)就來(lái)詳細(xì)的講解一下。

鄭州app開(kāi)發(fā)

但是會(huì)發(fā)現(xiàn) 簡(jiǎn)單的嵌套后 recycleview不能滑動(dòng) 或者無(wú)法看到展開(kāi)的全部?jī)?nèi)容

下面鄭州app開(kāi)發(fā)小編為大家附上解決問(wèn)題的代碼

經(jīng)過(guò)查閱相關(guān)內(nèi)容發(fā)現(xiàn)在設(shè)置recycleview。setLayoutManager可以解決這個(gè)問(wèn)題

下面是manager的代碼

public class FullyLinearLayoutManager extends LinearLayoutManager {

private static boolean canMakeInsetsDirty = true;

private static Field insetsDirtyField = null;

private static final int CHILD_WIDTH = 0;

private static final int CHILD_HEIGHT = 1;

private static final int DEFAULT_CHILD_SIZE = 100;

private final int[] childDimensions = new int[2];

private final RecyclerView view;

private int childSize = DEFAULT_CHILD_SIZE;

private boolean hasChildSize;

private int overScrollMode = ViewCompat.OVER_SCROLL_ALWAYS;

private final Rect tmpRect = new Rect();

public FullyLinearLayoutManager(Context context) {

super(context);

this.view = null;

}

public FullyLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {

super(context, orientation, reverseLayout);

this.view = null;

}

public FullyLinearLayoutManager(RecyclerView view) {

super(view.getContext());

this.view = view;

this.overScrollMode = ViewCompat.getOverScrollMode(view);

}

public FullyLinearLayoutManager(RecyclerView view, int orientation, boolean reverseLayout) {

super(view.getContext(), orientation, reverseLayout);

this.view = view;

this.overScrollMode = ViewCompat.getOverScrollMode(view);

}

public void setOverScrollMode(int overScrollMode) {

if (overScrollMode < ViewCompat.OVER_SCROLL_ALWAYS || overScrollMode > ViewCompat.OVER_SCROLL_NEVER)

throw new IllegalArgumentException("Unknown overscroll mode: " + overScrollMode);

if (this.view == null) throw new IllegalStateException("view == null");

this.overScrollMode = overScrollMode;

ViewCompat.setOverScrollMode(view, overScrollMode);

}

public static int makeUnspecifiedSpec() {

return View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);

}

@Override

public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int widthSpec, int heightSpec) {

final int widthMode = View.MeasureSpec.getMode(widthSpec);

final int heightMode = View.MeasureSpec.getMode(heightSpec);

final int widthSize = View.MeasureSpec.getSize(widthSpec);

final int heightSize = View.MeasureSpec.getSize(heightSpec);

final boolean hasWidthSize = widthMode != View.MeasureSpec.UNSPECIFIED;

final boolean hasHeightSize = heightMode != View.MeasureSpec.UNSPECIFIED;

final boolean exactWidth = widthMode == View.MeasureSpec.EXACTLY;

final boolean exactHeight = heightMode == View.MeasureSpec.EXACTLY;

final int unspecified = makeUnspecifiedSpec();

if (exactWidth && exactHeight) {

// in case of exact calculations for both dimensions let's use default "onMeasure" implementation

super.onMeasure(recycler, state, widthSpec, heightSpec);

return;

}

final boolean vertical = getOrientation() == VERTICAL;

initChildDimensions(widthSize, heightSize, vertical);

int width = 0;

int height = 0;

// it's possible to get scrap views in recycler which are bound to old (invalid) adapter entities. This

// happens because their invalidation happens after "onMeasure" method. As a workaround let's clear the

// recycler now (it should not cause any performance issues while scrolling as "onMeasure" is never

// called whiles scrolling)

recycler.clear();

final int stateItemCount = state.getItemCount();

final int adapterItemCount = getItemCount();

// adapter always contains actual data while state might contain old data (f.e. data before the animation is

// done). As we want to measure the view with actual data we must use data from the adapter and not from the

// state

for (int i = 0; i < adapterItemCount; i++) {

if (vertical) {

if (!hasChildSize) {

if (i < stateItemCount) {

// we should not exceed state count, otherwise we'll get IndexOutOfBoundsException. For such items

// we will use previously calculated dimensions

measureChild(recycler, i, widthSize, unspecified, childDimensions);

} else {

logMeasureWarning(i);

}

}

height += childDimensions[CHILD_HEIGHT];

if (i == 0) {

width = childDimensions[CHILD_WIDTH];

}

if (hasHeightSize && height >= heightSize) {

break;

}

} else {

if (!hasChildSize) {

if (i < stateItemCount) {

// we should not exceed state count, otherwise we'll get IndexOutOfBoundsException. For such items

// we will use previously calculated dimensions

measureChild(recycler, i, unspecified, heightSize, childDimensions);

} else {

logMeasureWarning(i);

}

}

width += childDimensions[CHILD_WIDTH];

if (i == 0) {

height = childDimensions[CHILD_HEIGHT];

}

if (hasWidthSize && width >= widthSize) {

break;

}

}

}

if (exactWidth) {

width = widthSize;

} else {

width += getPaddingLeft() + getPaddingRight();

if (hasWidthSize) {

width = Math.min(width, widthSize);

}

}

if (exactHeight) {

height = heightSize;

} else {

height += getPaddingTop() + getPaddingBottom();

if (hasHeightSize) {

height = Math.min(height, heightSize);

}

}

setMeasuredDimension(width, height);

if (view != null && overScrollMode == ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS) {

final boolean fit = (vertical && (!hasHeightSize || height < heightSize))

|| (!vertical && (!hasWidthSize || width < widthSize));

ViewCompat.setOverScrollMode(view, fit ? ViewCompat.OVER_SCROLL_NEVER : ViewCompat.OVER_SCROLL_ALWAYS);

}

}

private void logMeasureWarning(int child) {

}

private void initChildDimensions(int width, int height, boolean vertical) {

if (childDimensions[CHILD_WIDTH] != 0 || childDimensions[CHILD_HEIGHT] != 0) {

// already initialized, skipping

return;

}

if (vertical) {

childDimensions[CHILD_WIDTH] = width;

childDimensions[CHILD_HEIGHT] = childSize;

} else {

childDimensions[CHILD_WIDTH] = childSize;

childDimensions[CHILD_HEIGHT] = height;

}

}

@Override

public void setOrientation(int orientation) {

// might be called before the constructor of this class is called

//noinspection ConstantConditions

if (childDimensions != null) {

if (getOrientation() != orientation) {

childDimensions[CHILD_WIDTH] = 0;

childDimensions[CHILD_HEIGHT] = 0;

}

}

super.setOrientation(orientation);

}

public void clearChildSize() {

hasChildSize = false;

setChildSize(DEFAULT_CHILD_SIZE);

}

public void setChildSize(int childSize) {

hasChildSize = true;

if (this.childSize != childSize) {

this.childSize = childSize;

requestLayout();

}

}

private void measureChild(RecyclerView.Recycler recycler, int position, int widthSize, int heightSize, int[] dimensions) {

final View child;

try {

child = recycler.getViewForPosition(position);

} catch (IndexOutOfBoundsException e) {

return;

}

final RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) child.getLayoutParams();

final int hPadding = getPaddingLeft() + getPaddingRight();

final int vPadding = getPaddingTop() + getPaddingBottom();

final int hMargin = p.leftMargin + p.rightMargin;

final int vMargin = p.topMargin + p.bottomMargin;

// we must make insets dirty in order calculateItemDecorationsForChild to work

makeInsetsDirty(p);

// this method should be called before any getXxxDecorationXxx() methods

calculateItemDecorationsForChild(child, tmpRect);

final int hDecoration = getRightDecorationWidth(child) + getLeftDecorationWidth(child);

final int vDecoration = getTopDecorationHeight(child) + getBottomDecorationHeight(child);

final int childWidthSpec = getChildMeasureSpec(widthSize, hPadding + hMargin + hDecoration, p.width, canScrollHorizontally());

final int childHeightSpec = getChildMeasureSpec(heightSize, vPadding + vMargin + vDecoration, p.height, canScrollVertically());

child.measure(childWidthSpec, childHeightSpec);

dimensions[CHILD_WIDTH] = getDecoratedMeasuredWidth(child) + p.leftMargin + p.rightMargin;

dimensions[CHILD_HEIGHT] = getDecoratedMeasuredHeight(child) + p.bottomMargin + p.topMargin;

// as view is recycled let's not keep old measured values

makeInsetsDirty(p);

recycler.recycleView(child);

}

private static void makeInsetsDirty(RecyclerView.LayoutParams p) {

if (!canMakeInsetsDirty) {

return;

}

try {

if (insetsDirtyField == null) {

insetsDirtyField = RecyclerView.LayoutParams.class.getDeclaredField("mInsetsDirty");

insetsDirtyField.setAccessible(true);

}

insetsDirtyField.set(p, true);

} catch (NoSuchFieldException e) {

onMakeInsertDirtyFailed();

} catch (IllegalAccessException e) {

onMakeInsertDirtyFailed();

}

}

private static void onMakeInsertDirtyFailed() {

canMakeInsetsDirty = false;

}

}

以上信息由鄭州app開(kāi)發(fā)公司燚軒科技整理發(fā)布。


版權(quán)與免責(zé)聲明

鄭州APP開(kāi)發(fā),鄭州小程序開(kāi)發(fā)燚軒軟件科技有限公司聲明:如發(fā)現(xiàn)內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息發(fā)郵件至854221200@qq.com,我們將及時(shí)溝通處理。本站內(nèi)容源于網(wǎng)絡(luò),涉及內(nèi)容、言論與本站無(wú)關(guān)

分享到微信朋友圈 +
打開(kāi)微信,點(diǎn)擊底部的“發(fā)現(xiàn)”,使用 “掃一掃” 即可將網(wǎng)頁(yè)分享到我的朋友圈。 如何使用?
推薦文章
小程序開(kāi)發(fā)微商城,鄭州小程序開(kāi)發(fā)微商城優(yōu)勢(shì)

商城有什么好處呢?為什么大多數(shù)企業(yè)投資者在選擇的時(shí)候,都會(huì)將微商城作為首位呢?是不是小程序開(kāi)...

燚軒科技    · 09月17日 ·    小程序開(kāi)發(fā)微商城,鄭州小程序開(kāi)發(fā)
3437 閱讀量
鄭州小程序合同內(nèi)容,微信小程序開(kāi)發(fā)好嗎

開(kāi)發(fā)都是有合同的嗎?對(duì)于投資者詢問(wèn)的這個(gè)問(wèn)題,答案是肯定的,一般來(lái)說(shuō),合同的內(nèi)容都是圍繞雙方...

燚軒科技    · 12月03日 ·    鄭州微信小程序開(kāi)發(fā)
3715 閱讀量
企業(yè)在開(kāi)發(fā)APP的時(shí)候怎么做才會(huì)開(kāi)發(fā)出優(yōu)秀的品質(zhì)

斷的進(jìn)行鄭州APP開(kāi)發(fā)。然而隨著APP應(yīng)用的數(shù)量越來(lái)越多,其品質(zhì)就會(huì)越發(fā)顯得重要。那么接下來(lái)...

燚軒科技    · 06月01日 ·    APP開(kāi)發(fā) 、鄭州APP開(kāi)發(fā)
2558 閱讀量
你不知道的App運(yùn)營(yíng)潛規(guī)則都在這里了

p運(yùn)營(yíng)者,應(yīng)該做那些什么工作呢?這個(gè)行當(dāng)里又有哪些潛規(guī)則呢?今天鄭州做APP公司就為大家分析...

燚軒科技    · 01月13日 ·    鄭州做APP公司
3607 閱讀量
情感咨詢類(lèi) APP 多少錢(qián)?市場(chǎng)需求旺盛

,人們面臨著各種壓力,情感問(wèn)題日益凸顯,對(duì)情感咨詢的需求持續(xù)攀升。相關(guān)報(bào)告顯示,預(yù)計(jì)到 20...

燚軒科技    · 05月29日 ·    鄭州APP制作,鄭州軟件定制公司,鄭州app開(kāi)發(fā)公司,鄭州app開(kāi)發(fā)
409 閱讀量
寵物店搭上小程序的快車(chē),快速實(shí)現(xiàn)盈利目標(biāo)

物食品、用品、醫(yī)療、美容等相關(guān)寵物實(shí)體。小程序的介入,既滿足了年輕群體的上網(wǎng)習(xí)慣,又提高了業(yè)...

燚軒科技    · 09月22日 ·    小程序開(kāi)發(fā),鄭州小程序制作 小程序開(kāi)發(fā)公司
3279 閱讀量
蕉岭县| 黔江区| 镇坪县| 平罗县| 克山县| 科技| 平定县| 普洱| 鄯善县| 紫阳县| 龙海市| 塘沽区| 凤台县| 中阳县| 雷州市| 镇坪县| 嘉鱼县| 太湖县| 灵石县| 双流县| 洞口县| 静宁县| 玉门市| 宿松县| 宝坻区| 墨脱县| 遂宁市| 辉南县| 黔西县| 乳源| 长汀县| 大余县| 来凤县| 恩平市| 永胜县| 池州市| 凭祥市| 门头沟区| 共和县| 班戈县| 昭平县|