【问题标题】:Space between buttons not visible on small screen在小屏幕上看不到按钮之间的空间
【发布时间】:2021-07-28 09:08:58
【问题描述】:

我正在制作我的应用程序的主屏幕。在我完成后,它在设计屏幕上是完美的。但它在 Pixel 3a 模拟器中看起来不像,在我的小米红米 4x 上更糟。如何让它在模拟器和我的手机上看起来都像 Design Screen 变体。

我尝试将 ConstraintLayout 与 View 一起使用,但没有成功。还有其他解决方案吗?

这是截图

我已经上传了屏幕截图,但它似乎不起作用

<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/main_screen_image"
    android:fitsSystemWindows="true"
    tools:context=".HomeScreen">
    <!--    tools:openDrawer="start"-->

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/purple_200"
            android:elevation="4dp"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    </LinearLayout>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="20dp">

        <ImageView
            android:id="@+id/homeScreenLogo"
            android:layout_width="160dp"
            android:layout_height="160dp"
            android:layout_gravity="center"
            android:layout_marginTop="70dp"
            android:src="@drawable/kaznau_logo"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btnAboutUniversity"
            android:layout_width="160dp"
            android:layout_height="50dp"
            android:layout_marginStart="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="70dp"
            android:drawableLeft="@drawable/ic_university"
            android:text="@string/s_about_kaznau"
            android:textSize="14sp"
            app:cornerRadius="5dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/homeScreenLogo" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btnFaculties"
            android:layout_width="160dp"
            android:layout_height="50dp"
            android:layout_marginEnd="16dp"
            android:layout_marginRight="16dp"
            android:drawableLeft="@drawable/ic_faculty"
            android:text="Факультет"
            android:textSize="14sp"
            app:cornerRadius="5dp"
            app:layout_constraintBottom_toBottomOf="@+id/btnAboutUniversity"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="@+id/btnAboutUniversity" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btnNews"
            android:layout_width="160dp"
            android:layout_height="50dp"
            android:layout_marginStart="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="8dp"
            android:drawableLeft="@drawable/ic_baseline_article_24"
            android:text="@string/s_news"
            android:textSize="14sp"
            app:cornerRadius="5dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/btnAboutUniversity" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btnEvents"
            android:layout_width="160dp"
            android:layout_height="50dp"
            android:layout_marginEnd="16dp"
            android:layout_marginRight="16dp"
            android:drawableLeft="@drawable/ic_baseline_event_24"
            android:text="@string/events_name"
            android:textSize="14sp"
            app:cornerRadius="5dp"
            app:layout_constraintBottom_toBottomOf="@+id/btnNews"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="@+id/btnNews" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btnLocations"
            android:layout_width="160dp"
            android:layout_height="50dp"
            android:layout_marginStart="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="8dp"
            android:drawableLeft="@drawable/ic_location"
            android:text="@string/s_locations"
            android:textSize="14sp"
            app:cornerRadius="5dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/btnNews" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btnCampus"
            android:layout_width="160dp"
            android:layout_height="50dp"
            android:layout_marginEnd="16dp"
            android:layout_marginRight="16dp"
            android:drawableLeft="@drawable/ic_campus"
            android:text="@string/s_campus"
            android:textSize="14sp"
            app:cornerRadius="5dp"
            app:layout_constraintBottom_toBottomOf="@+id/btnLocations"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="@+id/btnLocations" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btnLinks"
            android:layout_width="160dp"
            android:layout_height="50dp"
            android:layout_marginStart="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="8dp"
            android:drawableLeft="@drawable/ic_links"
            android:text="@string/s_links"
            android:textSize="14sp"
            app:cornerRadius="5dp"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/btnLocations" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btnContacts"
            android:layout_width="160dp"
            android:layout_height="50dp"
            android:layout_marginEnd="16dp"
            android:layout_marginRight="16dp"
            android:drawableLeft="@drawable/ic_contacts"
            android:text="@string/s_contacs"
            android:textSize="14sp"
            app:cornerRadius="5dp"
            app:layout_constraintBottom_toBottomOf="@+id/btnLinks"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="@+id/btnLinks" />

        <com.google.android.material.button.MaterialButton
            android:id="@+id/btnAgrodamu"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:layout_gravity="center"
            android:layout_marginTop="8dp"
            android:text="@string/s_agrodamu"
            android:textSize="14sp"
            app:cornerRadius="5dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/btnLinks" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.drawerlayout.widget.DrawerLayout>

【问题讨论】:

  • 您可以在约束布局中使用指南。在下面试试我的答案,它会为你工作。

标签: android xml android-layout android-constraintlayout


【解决方案1】:

我不建议在布局中提供固定值,这就是它在不同密度的屏幕尺寸上失真的原因,而是使用百分比。 由于您已经为父级(ConstraintLayout)提供了填充,因此也无需为您的按钮提供外边缘边距。只需为右栏按钮提供左边距。 这是我要处理的非常相似的事情。这是其中一个按钮,您可以将其应用于休息。另请具体参考宽度和偏置属性,并根据您的设计进行调整。

<com.google.android.material.button.MaterialButton
            android:id="@+id/btnFaculties"
            android:layout_width="0dp"
            android:layout_height="50dp"
            android:layout_marginLeft="16dp"
            android:drawableLeft="@drawable/ic_faculty"
            android:text="Факультет"
            android:textSize="14sp"
            app:cornerRadius="5dp"
            app:layout_constraintBottom_toBottomOf="@+id/btnAboutUniversity"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/btnAboutUniversity" 
            app:layout_constraintWidth_percent="0.2" 
            app:layout_constraintHorizontal_bias="0.5"/>

【讨论】:

    【解决方案2】:

    android:layout_width="160dp" 更改为android:layout_width="wrap_content" 以更改所有这些材质按钮。

    【讨论】:

      【解决方案3】:

      最方便的做法是在 Constraint Layout 的中心添加 guideline 并将您的视图与 guideline 对齐从左或右。这样无论屏幕大小如何,您的布局都不会受到干扰。

      让我们这样试试吧:

      <androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      android:id="@+id/drawer_layout"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="@drawable/main_screen_image"
      android:fitsSystemWindows="true"
      tools:context=".HomeScreen">
      <!--    tools:openDrawer="start"-->
      
      <LinearLayout
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical">
      
          <androidx.appcompat.widget.Toolbar
              android:id="@+id/toolbar"
              android:layout_width="match_parent"
              android:layout_height="?attr/actionBarSize"
              android:background="@color/purple_200"
              android:elevation="4dp"
              android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
              app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
      </LinearLayout>
      
      <androidx.constraintlayout.widget.ConstraintLayout
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical"
          android:padding="20dp">
      
       <android.support.constraint.Guideline
              android:id="@+id/guideline39"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="vertical"
              app:layout_constraintGuide_percent="0.50" />
      
          <ImageView
              android:id="@+id/homeScreenLogo"
              android:layout_width="160dp"
              android:layout_height="160dp"
              android:layout_gravity="center"
              android:layout_marginTop="70dp"
              android:src="@drawable/kaznau_logo"
              app:layout_constraintEnd_toEndOf="parent"
              app:layout_constraintStart_toStartOf="parent"
              app:layout_constraintTop_toTopOf="parent" />
      
          <com.google.android.material.button.MaterialButton
              android:id="@+id/btnAboutUniversity"
              android:layout_width="160dp"
              android:layout_height="50dp"
              android:layout_marginStart="16dp"
              android:layout_marginLeft="16dp"
              android:layout_marginTop="70dp"
              android:layout_marginEnd="5dp"
              android:drawableLeft="@drawable/ic_university"
              android:text="@string/s_about_kaznau"
              android:textSize="14sp"
              app:cornerRadius="5dp"
              app:layout_constraintEnd_toStartOf="@+id/guideline39"
              app:layout_constraintStart_toStartOf="parent"
              app:layout_constraintTop_toBottomOf="@+id/homeScreenLogo" />
      
          <com.google.android.material.button.MaterialButton
              android:id="@+id/btnFaculties"
              android:layout_width="160dp"
              android:layout_height="50dp"
              android:layout_marginEnd="16dp"
              android:layout_marginRight="16dp"
              android:layout_marginStart="5dp"
              android:drawableLeft="@drawable/ic_faculty"
              android:text="Факультет"
              android:textSize="14sp"
              app:cornerRadius="5dp"
              app:layout_constraintStart_toStartOf="@+id/guideline39"
              app:layout_constraintBottom_toBottomOf="@+id/btnAboutUniversity"
              app:layout_constraintEnd_toEndOf="parent"
              app:layout_constraintTop_toTopOf="@+id/btnAboutUniversity" />
      
          <com.google.android.material.button.MaterialButton
              android:id="@+id/btnNews"
              android:layout_width="160dp"
              android:layout_height="50dp"
              android:layout_marginStart="16dp"
              android:layout_marginLeft="16dp"
              android:layout_marginTop="8dp"
              android:layout_marginEnd="5dp"
              android:drawableLeft="@drawable/ic_baseline_article_24"
              android:text="@string/s_news"
              android:textSize="14sp"
              app:cornerRadius="5dp"
              app:layout_constraintEnd_toStartOf="@+id/guideline39"
              app:layout_constraintStart_toStartOf="parent"
              app:layout_constraintTop_toBottomOf="@+id/btnAboutUniversity" />
      
          <com.google.android.material.button.MaterialButton
              android:id="@+id/btnEvents"
              android:layout_width="160dp"
              android:layout_height="50dp"
              android:layout_marginEnd="16dp"
              android:layout_marginRight="16dp"
              android:layout_marginStart="5dp"
              android:drawableLeft="@drawable/ic_baseline_event_24"
              android:text="@string/events_name"
              android:textSize="14sp"
              app:cornerRadius="5dp"
              app:layout_constraintStart_toStartOf="@+id/guideline39"
              app:layout_constraintBottom_toBottomOf="@+id/btnNews"
              app:layout_constraintEnd_toEndOf="parent"
              app:layout_constraintTop_toTopOf="@+id/btnNews" />
      
          <com.google.android.material.button.MaterialButton
              android:id="@+id/btnLocations"
              android:layout_width="160dp"
              android:layout_height="50dp"
              android:layout_marginStart="16dp"
              android:layout_marginLeft="16dp"
              android:layout_marginTop="8dp"
              android:layout_marginEnd="5dp"
              android:drawableLeft="@drawable/ic_location"
              android:text="@string/s_locations"
              android:textSize="14sp"
              app:cornerRadius="5dp"
              app:layout_constraintEnd_toStartOf="@+id/guideline39"
              app:layout_constraintStart_toStartOf="parent"
              app:layout_constraintTop_toBottomOf="@+id/btnNews" />
      
          <com.google.android.material.button.MaterialButton
              android:id="@+id/btnCampus"
              android:layout_width="160dp"
              android:layout_height="50dp"
              android:layout_marginEnd="16dp"
              android:layout_marginRight="16dp"
              android:layout_marginStart="5dp"
              android:drawableLeft="@drawable/ic_campus"
              android:text="@string/s_campus"
              android:textSize="14sp"
              app:cornerRadius="5dp"
              app:layout_constraintStart_toStartOf="@+id/guideline39"
              app:layout_constraintBottom_toBottomOf="@+id/btnLocations"
              app:layout_constraintEnd_toEndOf="parent"
              app:layout_constraintTop_toTopOf="@+id/btnLocations" />
      
          <com.google.android.material.button.MaterialButton
              android:id="@+id/btnLinks"
              android:layout_width="160dp"
              android:layout_height="50dp"
              android:layout_marginStart="16dp"
              android:layout_marginLeft="16dp"
              android:layout_marginTop="8dp"
              android:layout_marginEnd="5dp"
              android:drawableLeft="@drawable/ic_links"
              android:text="@string/s_links"
              android:textSize="14sp"
              app:cornerRadius="5dp"
              app:layout_constraintEnd_toStartOf="@+id/guideline39"
              app:layout_constraintStart_toStartOf="parent"
              app:layout_constraintTop_toBottomOf="@+id/btnLocations" />
      
          <com.google.android.material.button.MaterialButton
              android:id="@+id/btnContacts"
              android:layout_width="160dp"
              android:layout_height="50dp"
              android:layout_marginEnd="16dp"
              android:layout_marginRight="16dp"
              android:layout_marginStart="5dp"
              android:drawableLeft="@drawable/ic_contacts"
              android:text="@string/s_contacs"
              android:textSize="14sp"
              app:cornerRadius="5dp"
              app:layout_constraintStart_toStartOf="@+id/guideline39"
              app:layout_constraintBottom_toBottomOf="@+id/btnLinks"
              app:layout_constraintEnd_toEndOf="parent"
              app:layout_constraintTop_toTopOf="@+id/btnLinks" />
      
          <com.google.android.material.button.MaterialButton
              android:id="@+id/btnAgrodamu"
              android:layout_width="wrap_content"
              android:layout_height="50dp"
              android:layout_gravity="center"
              android:layout_marginTop="8dp"
              android:text="@string/s_agrodamu"
              android:textSize="14sp"
              app:cornerRadius="5dp"
              app:layout_constraintEnd_toEndOf="parent"
              app:layout_constraintStart_toStartOf="parent"
              app:layout_constraintTop_toBottomOf="@+id/btnLinks" />
      
      </androidx.constraintlayout.widget.ConstraintLayout>
      </androidx.drawerlayout.widget.DrawerLayout>
      

      【讨论】:

      • 试过了,没用。我手机上的按钮仍然跳在一起。在模拟器上有一点空间,但仍然不像在设计屏幕中
      • @Akzhan 他们跳到哪里去了?我按照指南尝试了您的代码,它运行良好。我在 5.0 英寸的屏幕尺寸上尝试并设计了它。低于此尺寸会干扰您的视图,因为您为按钮设置了固定宽度。
      【解决方案4】:

      使用匹配约束 (0dp) 而不是固定值,并在中心使用这样的指南

      <androidx.constraintlayout.widget.Guideline
              android:id="@+id/guideline3"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:orientation="vertical"
              app:layout_constraintEnd_toEndOf="parent"
              app:layout_constraintGuide_percent="0.5" //this is important
              app:layout_constraintHorizontal_bias="0.5"
              app:layout_constraintStart_toStartOf="parent" />
      

      现在从指南(8dp 左右)和父级的边距为您的按钮设置边距并使用匹配约束。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-07-25
        • 2015-04-15
        • 2021-04-07
        • 2021-07-11
        • 2011-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多