繁体   English   中英

屏幕上的 Android ViewPager 中心项目

[英]Android ViewPager center item on screen

我试图在我的屏幕上显示一个对话框。 并且该对话框中应该包含带有 FragmentPagerAdapter 的 ViewPager。 适配器中的每个项目的宽度都设置为 .7f。 对我来说重要的是,当某个项目被选中时,它应该被对齐到 ViewPager 的中心,并且下一个和上一个片段的部分可见(正如图像所示)。 不幸的是,默认行为是向左对齐。

请问有什么办法可以实现吗?

谢谢

(如果有人问:在那张图片上,ViewPager 没有在对话框上拉伸。实际上,对话框与父级的宽度相匹配,并且按这种方式布局,因此看起来不像)

屏幕

以防万一有人在寻找同样的东西,我找到了解决方案:只需将左右填充设置为 ViewPager,然后将 clipToPadding 设置为 false。 这将导致一个片段居中,而旁边的相邻片段则如图所示。 然后在片段之间添加空间使用 viewPager.setPageMargin(); 在代码中。

就是这样 :)

编辑://

这是一些示例代码

<android.support.v4.view.ViewPager
 android:id="@+id/viewPager"
 android:clipToPadding="false"
 android:paddingLeft="40dp"
 android:paddingRight="40dp"
 android:layout_width="match_parent"
 android:layout_height="match_parent" />

ClipToPadding=false 确保即使片段位于 viewPager 的内容区域之外,也会绘制它们。

然后在代码中在 viewPager 的项目之间添加空格:

mViewPager.setPageMargin(100);

请注意 setPageMargin 以像素数作为参数,而不是显示点数。 您可能应该将一些 dp 值转换为像素以在所有设备上具有正确的间距。 这种方法应该可以正常工作:

public static float dipToPixels(Context context, float dipValue) {
    DisplayMetrics metrics = context.getResources().getDisplayMetrics();
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dipValue, metrics);
}

我遇到了类似的问题,没有人试图以这种方式解决它,它可能不完全准确,但在视觉上看起来居中。

使用 DisplayMetrics 获取设备高度尺寸,然后为您的 viewpager 设置填充如下:

    int height = Resources.getSystem().getDisplayMetrics().heightPixels;

    pager.setPadding(0,height/6,0,0);

请注意,viewpager 的items 的布局必须设置为“wrap_content”,activity/fragment 高度中的viewpager 必须设置为“match_parent”。

在我的例子中, height/6 作为顶部填充使它看起来居中。 玩弄这个数字以获得最佳结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM