【问题标题】:ImageView in ViewPager doesnt get correct HeightViewPager 中的 ImageView 没有得到正确的高度
【发布时间】:2017-04-24 13:47:40
【问题描述】:

我有一个包含 userEntries 的列表。这些条目中的每一个都包含一个块,其中我有一些动态内容,在本例中是一个包含 1-3 个图像的 viewpager。当我希望这些图像具有正确的高度时,我的问题就来了。如果我将 ViewPager 高度设置为例如 100dp,则会显示图像并且 ViewPager 会按预期工作。但是,如果我旋转手机或使用更大的屏幕,图像会保持与 100dp 相同的宽度,这会限制它获得正确的宽度。由于发生这种情况,我想使用 wrap_content 所以它调整它的高度以将图像填充到它的全宽,但是当我这样做时,布局被最小化。请参阅下面的屏幕和代码。

CustomViewHolder.java

public void populateContentArea(int mListType, Context context){
    switch (mListType){
        case Constants.ListType.DATE_LIST:
            DatingEntryModel dateUser = (DatingEntryModel)mUser;
            LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View datingContent = layoutInflater.inflate(R.layout.dating_picture_container, llUserEntryContent, true);
            ViewPager datingPager = (ViewPager) datingContent.findViewById(R.id.datingPager);
            datingPager.setAdapter(new DatingPictureAdapter(context, dateUser.activities));
            TabLayout datingIndicator = (TabLayout) datingContent.findViewById(R.id.datingTabDots);
            datingIndicator.setupWithViewPager(datingPager);
            break;
        default:
            break;
    }
}

dating_picture_container.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v4.view.ViewPager
        android:id="@+id/datingPager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <android.support.design.widget.TabLayout
        android:id="@+id/datingTabDots"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_width="70dp"
        android:layout_height="20dp"
        app:tabIndicatorHeight="0dp"
        app:tabPaddingBottom="10dp"
        app:tabBackground="@drawable/tab_dot_selector"
        app:tabGravity="center"/>

</RelativeLayout>

DatingPictureAdapter.java

public class DatingPictureAdapter extends PagerAdapter {
        private Context mContext;
        List<DatingActivity> mActivities;

        public DatingPictureAdapter(Context context, List<DatingActivity> activities) {
            mContext = context;
            mActivities = activities;
        }

        @Override
        public Object instantiateItem(ViewGroup collection, int position) {
            DatingActivity activity = mActivities.get(position);
            final ImageView datingBanner = new ImageView(mContext);
            datingBanner.setAdjustViewBounds(true);
            datingBanner.setScaleType(ImageView.ScaleType.FIT_CENTER);
            UrlManager.loadDatingBannerGlide(mContext, activity.id).into(datingBanner);
            collection.addView(datingBanner, 0);
            return datingBanner;
        }

        @Override
        public int getCount() {
            return mActivities.size();
        }

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

        @Override
        public void destroyItem(ViewGroup collection, int position, Object view) {
            collection.removeView((View) view);
        }
    }

在一天结束时,将高度静态设置为 10dp,然后根据图像宽度调整大小对我来说是最好的解决方案。感谢所有回复:)

【问题讨论】:

  • 您的查看寻呼机项目 xml 文件在哪里?
  • 我尝试使用 XML 文件并在其中添加 ImageView,但它产生的结果与创建图像视图并添加到 viewpager 的结果相同,所以我只是认为它只是“工作”的代码很多" 通过将 ImageView 添加到 ViewPager。

标签: android imageview


【解决方案1】:

我认为这是因为您将ViewPager's 高度设置为“wrap_contentwrap_content 不适用于ViewPager。如果您将其更改为 match_parent 或静态 dp,您的问题将得到解决。

<android.support.v4.view.ViewPager
        android:id="@+id/datingPager"
        android:layout_width="match_parent"
        android:layout_height="144dp"/>

【讨论】:

  • 好吧,我不知道 wrap_content 在 ViewPager 上不起作用。谢谢。但我知道它可以通过设置硬编码的高度来工作,但这让它在不同的屏幕尺寸上看起来非常糟糕。所以不知何故,我需要通过获取图像应该具有的高度来动态设置高度。我必须尝试一些不同的方法,看看我是否可以让它工作:)。
  • 您可以为不同的屏幕尺寸使用不同的 xml 尺寸。我建议您使用具有不同尺寸和 scaleType 中心的静态高度。
【解决方案2】:

我认为您有两种方法可以做到这一点: 1-如果你想使用不同方向的不同布局,你必须为每个方向创建一个布局 2-您可以通过程序获得显示的高度并将布局放入动态比例高度

希望对你有帮助

【讨论】:

  • 当我尝试以编程方式更改高度时,没有任何变化,并且我已经在 xml 中设置了正确的方向。我认为我在 RelativeLayout 上有垂直方向,我认为这是不需要的;)。感谢您对此提出一些想法:)
  • 您可以通过编程方式尝试的其他内容也设置为 weight 属性,即小部件的比例属性
  • 啊,没试过。生病看看它做什么。编辑:没有做任何事情:(
  • 如果答案对您有帮助,请引用以帮助其他人解决同样的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
相关资源
最近更新 更多