1本で3ViewPagers
本使用していLinearLayout
ます。の高さViewPager
をwrap_content
動的に設定したい。私のフラグメントViewPager
も動的にロードされます。そのため、フラグメントの高さがビューページャーの高さよりも大きい場合、ページ変更時にビューページャーの高さを自動的に増やす必要があります。
レイアウトはこんな感じ
何をすべきか提案してください。
1本で3ViewPagers
本使用していLinearLayout
ます。の高さViewPager
をwrap_content
動的に設定したい。私のフラグメントViewPager
も動的にロードされます。そのため、フラグメントの高さがビューページャーの高さよりも大きい場合、ページ変更時にビューページャーの高さを自動的に増やす必要があります。
レイアウトはこんな感じ
何をすべきか提案してください。
問題は、「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);
}
}
実装が次のように見えると仮定すると、
<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 にしたくない場合は幅を変更する必要があります。