gpt4 book ai didi

java - 使 ViewPager 的高度等于 PagerAdapter 中最高的项目

转载 作者:行者123 更新时间:2023-12-05 00:03:15 24 4
gpt4 key购买 nike

我有一个 ViewPager 并用它在 View 之间滑动而不是 Fragments 。当我给 View Pager wrap_content 高度时,它没有显示任何内容。所以我不得不给它一个固定的高度。但我还有另一个问题,当项目的高度大于固定高度时, View 无法正确显示(我使用 TextView 作为 View )。那么我应该怎么做才能使 ViewPager 的高度等于最高的。

我像下面的代码一样使用 PagerAdapter

public class IndicatorViewPagerAdapter extends PagerAdapter {
private Context context;
public int[] images = {R.drawable.userprofile,R.drawable.userprofile,R.drawable.userprofile,R.drawable.userprofile,R.drawable.userprofile};
public int[] texts = {R.string.first_text,R.string.second_text,R.string.third_text,R.string.fourth_text,R.string.fifth_text};
LayoutInflater layoutInflater;
Typeface typeface;
String lang;
public IndicatorViewPagerAdapter(Context context,String lang) {
this.context = context;
this.lang=lang;
}

@Override
public int getCount() {
return texts.length;
}

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view==object;
}

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.feeds_item_layout,null);
ImageView imageView = view.findViewById(R.id.image);
TextView textView = view.findViewById(R.id.desc);
imageView.setImageResource(images[position]);
String text = context.getResources().getString(texts[position]);
Log.e("text"," "+text);
textView.setText(text);
//ViewPager viewPager = (ViewPager) container;
if(lang.equals("en")) {
typeface = ResourcesCompat.getFont(context, R.font.knowledge_regular);
}
else {
typeface = ResourcesCompat.getFont(context, R.font.thesans_plain);
}
textView.setTypeface(typeface);
container.addView(view);


return view;
}

@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
ViewPager viewPager = (ViewPager) container;
View view = (View) object;
viewPager.removeView(view);
}


}

在这里,我在 XML

中使用了 ViewPager
<LinearLayout
android:layout_width="match_parent"
android:layout_height="@dimen/_150sdp"
android:layout_marginTop="10dp"
android:background="#85d7d5d6"
android:orientation="horizontal"
android:padding="10dp">

<TextView
android:id="@+id/leftArrowTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/arrow_color"
android:textSize="@dimen/_20ssp" />

<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />

<TextView
android:id="@+id/rightArrowTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/arrow_color"
android:textSize="@dimen/_20ssp" />

</LinearLayout>

最佳答案

我不太明白你为什么要发布你的 IndicatorViewPagerAdapter 代码。

您的适配器代码用于填充数据,它与 View 的大小无关,即ViewPager

对我来说,尝试自定义 viewpager 并应用手动调整大小逻辑可能更有意义。所以我在 stackoverflow 上寻找这个,因为找到了一个流行的 stackoverflow 帖子,你甚至在其中发表评论,但似乎你也对如何实际实现它感到困惑。需要说明的是,我根本没有对此进行测试,但您似乎对适配器 View 之间的区别感到困惑。

public class WrapContentHeightViewPager extends ViewPager {

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

public WrapContentHeightViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int 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);
}

}

然后将您的 XML 更改为

            <TextView
android:id="@+id/leftArrowTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/arrow_color"
android:textSize="@dimen/_20ssp" />

<my.package.name.WrapContentHeightViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true" />

<TextView
android:id="@+id/rightArrowTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="@color/arrow_color"
android:textSize="@dimen/_20ssp" />

</LinearLayout>

关于java - 使 ViewPager 的高度等于 PagerAdapter 中最高的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66862287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com