2

1本で3ViewPagers本使用していLinearLayoutます。の高さViewPagerwrap_content動的に設定したい。私のフラグメントViewPagerも動的にロードされます。そのため、フラグメントの高さがビューページャーの高さよりも大きい場合、ページ変更時にビューページャーの高さを自動的に増やす必要があります。

レイアウトはこんな感じ

ここに画像の説明を入力

何をすべきか提案してください。

4

2 に答える 2

5

問題は、「wrap_content」がビュー ページャーで機能していないように見えることです。解決策は次のとおりです。

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.View;

public class CustomViewPager extends ViewPager {

public CustomViewPager(Context context) {
    super(context);
}

public CustomViewPager(Context context, AttributeSet attrs){

    super(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    int height = 0;
    for(int i = 0; i < getChildCount(); i++) {

        View child = getChildAt(i);

        child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

        int h = child.getMeasuredHeight();

        if(h > height) height = h;

    }

    heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}

参照: Android: ViewPager WRAP_CONTENT を使用できません

于 2015-06-18T11:39:10.897 に答える
0

実装が次のように見えると仮定すると、

<LinearLayout android:orientation="vertical">
    <ViewPager />
    <ViewPager />
    <ViewPager />
</LinearLayout>

次に、ViewPagers の高さを設定するwrap_contentと、目的の結果が得られるはずです。これを動的に行う必要はありません。それ以外の場合、動的に実行する必要がある場合は、ViewPager の layoutParams をコードから次のように設定します。

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.WRAP_CONTENT, 
    LinearLayout.LayoutParams.WRAP_CONTENT);
viewPager.setLayoutParams(lp);

LayoutParams コンストラクターのパラメーターは (幅、高さ) であり、wrap_content にしたくない場合は幅を変更する必要があります。

于 2013-10-23T14:17:53.633 に答える