Android ViewPager中心项目在屏幕上

时间:2015-02-28 15:56:49

标签: android dialog android-viewpager fragment center

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

有没有办法实现它?

谢谢

(正如有人问:在那张照片上,ViewPager没有延伸到对话框。实际上,对话框与父母的宽度匹配,并且布局方式让它看起来不像)

screen

2 个答案:

答案 0 :(得分:13)

万一有人在寻找同样的事情,我已经找到了解决方案: 只需将左右填充设置为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);
}

答案 1 :(得分:0)

我正面临着类似的问题,没有人试图以这种方式进行处理,它可能不完全准确,但外观看起来居中。

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

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

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

请注意,viewpager项的布局必须设置为“ wrap_content”,活动/片段高度中的viewpager必须为“ match_parent”。

在我的情况下,高度/ 6作为顶部填充使其看起来居中。试一试这个数字,以获得最佳效果。