在相同分辨率的屏幕上,不同设备上显示的布局不同。

8
问题:在相同分辨率屏幕上,布局在不同设备上显示不同。我在三星Galaxy S4(1080x1920)和LG G2(1080x1920)上进行了测试。它们具有相同的分辨率,为什么在每个设备上布局显示不同?
我将所有内容放在布局文件夹中,并没有其他分辨率的布局文件。
以下是屏幕截图:
  • 三星Galaxy S4

http://www.image-share.com/ijpg-2963-272.html

  • LG G2

http://www.image-share.com/ijpg-2963-271.html

编辑 #1

<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"
android:id="@+id/layoutMain"
tools:mContext="com.test.app.flock.mActivity">

<ImageView
    android:id="@+id/imageViewImageBackground"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="gone" />

<View
    android:id="@+id/viewBackground"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background01" />

<View
    android:id="@+id/viewFingerprint"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/fingerprint01"
    android:visibility="gone" />

<Button
    android:id="@+id/buttonScanning"
    android:layout_width="162dp"
    android:layout_height="130dp"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="41dp"
    android:background="@android:color/transparent" />

<ImageView
    android:id="@+id/imageViewScanner"
    android:layout_width="162dp"
    android:layout_height="130dp"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="41dp"
    android:src="@drawable/line01"

    android:visibility="gone" />

<TextView
    android:id="@+id/textViewResult"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="180dp"

    android:text="SCANNING"
    android:textSize="30sp"
    android:textColor="@android:color/white"
    android:textStyle="bold"
    android:gravity="center"

    android:visibility="gone" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="55dp"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="112dp"
    android:orientation="vertical">

    <DigitalClock
        android:id="@+id/digitalClock"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="7"

        android:textSize="30sp"
        android:textColor="@android:color/white"
        android:gravity="center"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textViewDate"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="10"

        android:text="10 Grudzien 2015"
        android:textSize="20sp"
        android:textColor="@android:color/white"
        android:gravity="center"
        android:textStyle="bold" />

</LinearLayout>


这是关于像素密度的问题。但是你不会有任何问题,因为你在UI中使用XML,并且以DP(像素密度)指定宽度和高度。 - Vlad
布局在S4上显示方式不同。在其他具有相同屏幕分辨率的设备上,一切都很好。那么问题出在哪里呢? - Pietras
@Onik 您好,谢谢!我能否直接从设备界面获取此信息?联想(https://www.gsmarena.com/lenovo_tab3_7-7951.php)网站上说:“600 x 1024像素,16:9比例(170 ppi密度)”,而华为(https://www.gsmarena.com/huawei_mediapad_t3_7_0-8635.php)则说:“600 x 1024像素,16:9比例(170 ppi密度)”。我只发现了一个区别:7.0英寸,137.9平方厘米(72.2%屏幕占比)和7.0英寸,137.9平方厘米(74.3%屏幕占比)。 - Patrick
@Patrick,这里的关键是要看系统如何处理显示器。互联网上的信息只是一个规范... - Onik
@Onik,我在华为(比例1.3)中得到了213(像素/英寸),在联想(比例1.0)中得到了160。 - Patrick
显示剩余2条评论
2个回答

5

这两款手机的分辨率是相同的,但是由于LG G2在屏幕上有导航键,所以窗口高度不同。


嗯,是的。那我该怎么修复它?如何创建单独的布局? - Pietras
1
不要试图绝对定位视图,使其看起来拥有自己的背景,而是为整个屏幕制作一个背景和每个视图的背景。 - Lamorak
也许有一种方法可以为具有导航栏和没有导航栏的设备创建两个XML文件? - Pietras
这是正确的,但你不会只用两个XML文件就结束了。基本上,你需要为每个设备准备一个XML文件,以确保它看起来完美无缺。 - Lamorak
我有同样的问题,而且我的导航键也不可见:http://new.izigo.pt/content/images/IMG_3209.JPG 你有什么想法可以解决这个问题吗? - Patrick

0
问题不在于布局或密度,而在于由于按钮栏的存在而可用的不同高度。 由于设置为Viewbackground的图像将会扩展并扭曲,我建议您将其作为ImageViewsrc并将scaleType设置为fitCenter,这样图像将适合屏幕并保持其比例:
<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="fitCenter"
    android:src="@drawable/background01" />

嗨,谢谢!在我的情况下,这是一个带有loadUrl的webView,所以我无法访问图像,它在HTML中。 - Patrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接