【问题标题】:Android Studio components not centering correctly when tested on an external device在外部设备上测试时,Android Studio 组件无法正确居中
【发布时间】:2021-04-23 15:39:43
【问题描述】:

我有一个用 Java 编写的简单应用程序,我正在尝试在 Android 设备上运行它。代码运行没有问题,但小部件的布局不一致。

我希望所有这些都在屏幕上居中,当我在 Android Studio 的模拟器中运行该程序时,这可以工作 - 我已经使用模拟的 Nexus 6P 和 Pixel 3A 进行了尝试。

但是,当我在物理设备 Galaxy S9 上运行程序时,一些小部件不再居中。

我已尝试将 RelativeLayout 的重心居中,并为每个小部件使用 android:layout_centerHorizo​​ntal="true"。我还尝试将小部件的大小设置为 match_parent,然后将重力水平居中于其中。到目前为止,这都给出了相同的结果。

我包含下面的 XML 代码,以及两张用于比较的屏幕截图,一张来自模拟的 Nexus 6P,一张来自 Galaxy S9。您应该看到按钮和数字字段居中,但所有文本都略微偏离中心。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_horizontal"
    android:gravity="center_horizontal"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <TextView
        android:id="@+id/txtTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginStart="0dp"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="25dp"
        android:editable="false"
        android:gravity="center_horizontal"
        android:text="Arby's Hi-Lo Guessing Game"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:visibility="visible" />

    <TextView
        android:id="@+id/txtPrompt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_centerHorizontal="true"
        android:layout_marginStart="-2dp"
        android:layout_marginLeft="0dp"
        android:layout_marginTop="75dp"
        android:gravity="center|center_horizontal"
        android:text="Enter a number between 1 and 100:"
        android:textAppearance="@style/TextAppearance.AppCompat.Medium"
        android:layout_alignParentLeft="true" />

    <EditText
        android:id="@+id/txtGuess"
        android:layout_width="75dp"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="105dp"
        android:layout_marginEnd="166dp"
        android:layout_marginRight="166dp"
        android:ems="10"
        android:gravity="center_horizontal"
        android:inputType="number" />

    <Button
        android:id="@+id/btnGuess"
        android:layout_width="126dp"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerInParent="true"
        android:layout_marginTop="175dp"
        android:text="Guess!" />

    <TextView
        android:id="@+id/lblOutput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="250dp"
        android:gravity="center_horizontal"
        android:text="Enter a number, then click Guess!"
        android:textAppearance="@style/TextAppearance.AppCompat.Medium"
        android:textSize="18sp" />
</RelativeLayout>

Emulator Alignment

Physical Device Alignment

【问题讨论】:

    标签: java android android-studio android-layout layout


    【解决方案1】:

    您的视图在dp 中设置了绝对边距。这些在不同尺寸的屏幕上看起来不一样。删除所有 marginStartmarginEndmarginRightmarginLeft 属性。然后RelativeLayout 应该正确地居中视图。

    【讨论】:

      【解决方案2】:

      试试这个,我做得很快,但我希望它会起作用;)

      <?xml version="1.0" encoding="utf-8"?>
      <android.support.constraint.ConstraintLayout 
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      android:layout_width="match_parent"
      android:layout_height="match_parent">
      
      <TextView
          android:id="@+id/txtTitle"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          app:layout_constraintTop_toTopOf="parent"
          android:textAlignment="center"
          android:layout_marginTop="25dp"
          android:editable="false"
          android:text="Arby's Hi-Lo Guessing Game"
          android:textAppearance="@style/TextAppearance.AppCompat.Large"
          android:visibility="visible"
          />
      
      <TextView
          android:id="@+id/txtPrompt"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          app:layout_constraintTop_toBottomOf="@+id/txtTitle"
          android:textAlignment="center"
          android:layout_marginTop="25dp"
          android:text="Enter a number between 1 and 100:"
          android:textAppearance="@style/TextAppearance.AppCompat.Medium"
          />
      
      <EditText
          android:id="@+id/txtGuess"
          android:layout_width="75dp"
          android:layout_height="wrap_content"
          app:layout_constraintTop_toBottomOf="@+id/txtPrompt"
          app:layout_constraintLeft_toLeftOf="parent"
          app:layout_constraintRight_toRightOf="parent"
          android:inputType="number" />
      
      <Button
          android:id="@+id/btnGuess"
          app:layout_constraintTop_toBottomOf="@+id/txtGuess"
          app:layout_constraintLeft_toLeftOf="parent"
          app:layout_constraintRight_toRightOf="parent"
          android:layout_marginTop="30dp"
          android:layout_width="126dp"
          android:layout_height="wrap_content"
          android:text="Guess!" />
      
      <TextView
          android:id="@+id/lblOutput"
          app:layout_constraintTop_toBottomOf="@+id/btnGuess"
          android:textAlignment="center"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:layout_marginTop="30dp"
          android:text="Enter a number, then click Guess!"
          android:textAppearance="@style/TextAppearance.AppCompat.Medium"
          android:textSize="18sp" />
      </android.support.constraint.ConstraintLayout>
      

      【讨论】:

        猜你喜欢
        • 2021-11-05
        • 1970-01-01
        • 2017-08-03
        • 1970-01-01
        • 1970-01-01
        • 2011-10-27
        • 2020-12-08
        • 1970-01-01
        • 2015-09-11
        相关资源
        最近更新 更多