this ve that cevaplarını takip ettim, ayrıca this linkini de buldum.Dinamik yükseklikte çalışmayan Viewpager (her zaman ilk parçanın yüksekliğini kullanın)
Bu kaynakları deneme & hatasını yapmak için kullanıyorum. Artık benim özel ViewPager
içeriğiyle, içeriğini ölçüyor ancak sadece ilk görüntülenen. FYI, benim ViewPager
benim ExpendableListView
gibi bazı karmaşık görünümleri tutar - bu nedenle bu kaynaklardaki kodların hiçbiri mükemmel çalışmadığı için kodu kendim değiştirmem gerekir.
ben 4 fragmanlarını (içerik) sahip, bu yüzden bu benim özel ViewPager
olduğunu pager.setOffscreenPageLimit(3);
kullanın: Bu benim CustomPagerTabStrip
olduğunu
public class CustomViewPager extends ViewPager{
public CustomViewPager (Context context) {
super(context);
}
public CustomViewPager (Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
boolean wrapHeight = MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST;
final View tab = getChildAt(0);
int width = getMeasuredWidth();
int tabHeight = tab.getMeasuredHeight();
if (wrapHeight) {
// Keep the current measured width.
widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
}
int fragmentHeight = measureFragment(((Fragment) getAdapter().instantiateItem(this, getCurrentItem())).getView());
heightMeasureSpec = MeasureSpec.makeMeasureSpec(tabHeight + fragmentHeight + (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics()), MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
public int measureFragment(View view) {
if (view == null)
return 0;
view.measure(0, 0);
return view.getMeasuredHeight();
}
}
:
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
android.view.ViewGroup.LayoutParams params = getLayoutParams();
params.height = getMeasuredHeight();
Ve bu benim XML :
<RelativeLayout
android:id="@+id/relativePager"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<com.xxx.yyy.util.CustomViewPager
android:id="@+id/detailPager"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<com.xxx.yyy.util.CustomPagerTabStrip
android:id="@+id/detailTab"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#161C28"
android:textColor="#FFFFFF" />
</com.xxx.yyy.util.CustomViewPager>
</RelativeLayout>
örnek vaka:
ilk veridiliminin yüksekliği sonra tüm diğer parçaların 100 piksel kalacak, 100px ise. İkinci parçanın yüksekliği 130px ise 100 piksele kesilecektir. i hata ayıklamak için çalıştı
,
Activity
oluşturulur benim CustomViewPager
hep denilen 4 kez onMeasure
, ancak bunların hepsi sadece ilk parçasını okuyun. hiçbir zaman hiçbir zaman tekrar aramayı denemiyorum (sol/sağa) bir parçadan diğerine değişse bile. Lütfen bana yardım edin, bu şeyin işe yaraması için çok zaman harcadım. Daha fazla bilgiye ihtiyacınız varsa bana sorun, Zaman ayırdığınız için teşekkürler.
Herhangi bir yardım lütfen? –
Merhaba, sorunu nasıl çözdüğünüzü biliyorum .. –
@RenjithKN Ne yazık ki bu sorunu çözemedim bu yüzden farklı bir yaklaşım kullanıyorum (görüş cihazında bazı karmaşık görünümleri kullanmayın) :( –