无法理解所有分辨率的布局大小的逻辑

时间:2018-05-08 08:21:34

标签: android android-layout android-constraintlayout

我读了很多关于这方面的意见,但实际上,在创建了包含(ldpimdpihdpi等所有布局文件夹并修正所有文件后,我的布局和#39 ; s元素并没有停留在一点上。现在我尝试使用ConstrantLayout,并尽可能地完成所有绑定,但是我可以。如果这意味着,对于每个显示器的实际结果,我需要显示分辨率/显示尺寸的每种可能组合。这是合乎逻辑的,但它太多了......

已编辑:仅与TextViews有关的问题... 我发现,我的低分辨率手机仍然使用了xxxhdpi的layuot,我认为这个问题。我读到有关添加到Manifest <support-screen>构造的内容,但我不确定这是解决问题的正确方法..

    <?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/cards">

    <ImageView
        android:id="@+id/card_image"
        android:layout_width="0dp"
        android:layout_height="227dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/black_h" />

    <ImageButton
        android:id="@+id/button_confirm"
        android:layout_width="47dp"
        android:layout_height="43dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginTop="16dp"
        android:background="@color/TransperantColor"
        android:scaleType="centerInside"
        android:scaleX="0.7"
        android:scaleY="0.7"
        android:src="@drawable/confirm_light"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/confirm_light" />

    <ImageButton
        android:id="@+id/button_home"
        android:layout_width="47dp"
        android:layout_height="43dp"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:background="@color/TransperantColor"
        android:scaleType="centerInside"
        android:scaleX="0.7"
        android:scaleY="0.7"
        android:src="@drawable/home_light"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/home_light" />

    <TextView
        android:id="@+id/head_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginStart="20dp"         
        android:textColor="@color/White"
        android:textSize="36sp"
        app:layout_constraintBottom_toBottomOf="@+id/card_image"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="14dp"
        android:textColor="@color/myTextColor"
        android:textSize="18sp"
        android:textStyle="bold"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/head_name" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="6dp"
        android:textColor="@color/myTextColor"
        android:textSize="17sp"
        android:textStyle="bold"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"
        android:textColor="@color/myTextColor"
        android:textSize="17sp"
        android:textStyle="bold"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView3" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="16dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="1dp"
        android:textColor="@color/myTextColor"
        android:textSize="17sp"
        android:textStyle="bold"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView4" />

    <TextView
        android:id="@+id/mon_fri_text"
        android:layout_width="wrap_content"
        android:layout_height="19dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="16dp"
        android:textColor="@color/myTextColor"
        android:textSize="15sp"
        app:layout_constraintBaseline_toBaselineOf="@+id/textView3"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toEndOf="@+id/textView3" />

    <TextView
        android:id="@+id/sat_text"
        android:layout_width="wrap_content"
        android:layout_height="19dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="25dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="25dp"
        android:textColor="@color/myTextColor"
        android:textSize="15sp"
        app:layout_constraintBaseline_toBaselineOf="@+id/textView4"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toEndOf="@+id/textView4" />

    <TextView
        android:id="@+id/sun_text"
        android:layout_width="wrap_content"
        android:layout_height="19dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="27dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="27dp"
        android:textColor="@color/myTextColor"
        android:textSize="15sp"
        app:layout_constraintBaseline_toBaselineOf="@+id/textView5"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.008"
        app:layout_constraintStart_toEndOf="@+id/textView5" />

    <TextView
        android:id="@+id/decription_text"
        android:layout_width="353dp"
        android:layout_height="86dp"
        android:layout_marginEnd="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="20dp"
        android:textColor="@color/myTextColor"
        android:textSize="15sp"
        android:textStyle="italic"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/sun_text" />

    <ImageView
        android:id="@+id/imageView11"
        android:layout_width="33dp"
        android:layout_height="33dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="20dp"
        android:scaleX="0.8"
        android:scaleY="0.8"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/decription_text"
        app:srcCompat="@drawable/phone_ico" />

    <ImageView
        android:id="@+id/imageView12"
        android:layout_width="33dp"
        android:layout_height="29dp"
        android:layout_marginBottom="28dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="14dp"
        android:scaleX="0.8"
        android:scaleY="0.8"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView11"
        app:layout_constraintVertical_bias="0.0"
        app:srcCompat="@drawable/geo_ico" />

    <TextView
        android:id="@+id/phone1_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="10dp"
        android:layout_marginTop="18dp"
        android:textColor="@color/myTextColor"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toEndOf="@+id/imageView11"
        app:layout_constraintTop_toBottomOf="@+id/decription_text" />

    <TextView
        android:id="@+id/phone2_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="10dp"
        android:layout_marginTop="4dp"
        android:textColor="@color/myTextColor"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toEndOf="@+id/imageView11"
        app:layout_constraintTop_toBottomOf="@+id/phone1_name" />

    <TextView
        android:id="@+id/adress"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="17dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:textColor="@color/myTextColor"
        android:textSize="15sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.025"
        app:layout_constraintStart_toEndOf="@+id/imageView12"
        app:layout_constraintTop_toBottomOf="@+id/phone2_name" />

</android.support.constraint.ConstraintLayout>

1 个答案:

答案 0 :(得分:0)

我将分享我在研究中发现的内容,如果以任何方式我错了,请随时编辑或更正。我的主要来源是documentation page

AFAIK mdpi,hdpi等更适合可绘制资源,需要支持不同的像素密度。处理屏幕尺寸时,在创建不同的布局时需要考虑两个选项:

1)最小宽度 - 使您能够根据以dps为单位测量的最小宽度提供不同的布局。根据{{​​3}}:

  

您可以使用此限定符来确保无论屏幕的当前方向如何,您的应用都至少具有可用于其UI的宽度dps。

为其提供布局资源时,它看起来像layout-sw600dp

2)可用宽度 - 根据当前可用的宽度提供布局。

  

您可以使用它来指定布局所需的最小宽度,而不是同时使用屏幕尺寸和方向限定符。这通常有助于确定是否使用多窗格布局。

看起来像layout-w600dp

以下是您可以提供的一些尺寸:

  

320dp:典型的手机屏幕(240x320 ldpi,320x480 mdpi,480x800 hdpi等)。
  480dp:一个大手机屏幕~5“(480x800 mdpi)   600dp:7“平板电脑(600x1024 mdpi)   720dp:10英寸平板电脑(720x1280 mdpi,800x1280 mdpi等)。

但我相信为了完全理解这个概念,您需要从docs页面开始阅读文档。