Imageview在不同大小和密度上看起来不同

时间:2016-05-21 17:49:25

标签: android android-layout android-fragments

我制作了一个带有可滑动片段的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);

这是我得到的输出:

enter image description here

我怎样才能让它们看起来像在Nexus 6P上一样?我需要将dp转换为px,反之亦然,以及如何做到这一点? 谢谢!

2 个答案:

答案 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值。这样,不同类型的模拟器/手机将使用不同的文件,图像看起来几乎相同。

这种方式就像一个魅力!

此致 杰