我制作了一个带有可滑动片段的Viewpager,您可以在其中看到另一个片段的局部视图。片段具有单个图像视图,即显示的内容。我尝试在不同的模拟器上运行我的代码,结果总是不同的。如何才能使它在所有屏幕尺寸上看起来都一样? 这是包含viewpager和buttons的片段:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.digital05.masu.Fragments.MassageViewFragment">
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="150dp"
android:id="@+id/massageViewPager"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true">
</android.support.v4.view.ViewPager>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Date"
android:id="@+id/buttonDate"
android:layout_below="@+id/massageViewPager"
android:layout_alignLeft="@+id/buttonTime"
android:layout_alignStart="@+id/buttonTime"
android:layout_marginTop="43dp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Time"
android:id="@+id/buttonTime"
android:layout_below="@+id/buttonDate"
android:layout_centerHorizontal="true"/>
这就是片段的样子:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.digital05.masu.Fragments.SwedishMFragment">
<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="58dp"
android:src="@drawable/prenatal_massage"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"/>
这就是我设置viewpager以显示其他片段的部分视图(他们的图像视图)的方法:
mViewPager.setClipToPadding(false);
mViewPager.setPadding(300, 0, 300, 0);
mViewPager.setPageMargin(50);
这是我得到的输出:
我怎样才能让它们看起来像在Nexus 6P上一样?我需要将dp转换为px,反之亦然,以及如何做到这一点? 谢谢!
答案 0 :(得分:0)
您可以使用原始数字为ViewPager
设置填充和边距,您应该在每个看起来相同的屏幕中将它们转换为DP。
float density = context.getResources().getDisplayMetrics().density;
public static int dp(float value) {
if (value == 0) {
return 0;
}
return (int) Math.ceil(density * value);
}
还有另一种使用ButterKnife库的方法,通过以下代码可以获得正确的值:
@BindDimen(R.dimen.your_dimen_value)
int myPadding;
如果您需要帮助了解DP,请点击此处:https://developer.android.com/guide/practices/screens_support.html
答案 1 :(得分:0)
经过几天的努力,我设法让它发挥作用。 我已将dimens.xml中mViewPager.setPageMargin()的值设为dp。然后,我创建了dimension hdpi,xhdpi,xxhdpi和xxxhdpi文件夹,它们具有不同的setPageMargin值。这样,不同类型的模拟器/手机将使用不同的文件,图像看起来几乎相同。
这种方式就像一个魅力!
此致 杰