【问题标题】:Android: layout size issue when changing device settingsAndroid:更改设备设置时的布局大小问题
【发布时间】:2018-04-03 12:37:44
【问题描述】:

我目前在改变尺寸方面遇到了麻烦。

我已经使用 dp 对我的 xml 文件进行了编码,但是当我更改设备屏幕大小时,布局会发生变化。

例如,当我进入设置 - 显示 - 屏幕缩放和字体并将屏幕缩放从中到大设置时,我的布局中的某些元素(例如图像视图或按钮)会增长并超出屏幕。

由于我使用的是包含 LinearLayouts 和 FrameLayouts 的复杂布局,我不清楚我应该如何使这个布局在任何其他设备或屏幕尺寸下看起来都正常。似乎当我更改屏幕缩放设置时,dp 的值会发生变化。

有没有办法避免这个问题,或者以编程方式将屏幕缩放设置设置为中等?

这是我的代码:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_gravity="center"
    android:layout_marginTop="65dp">

    <android.support.constraint.ConstraintLayout
        android:id="@+id/frameLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="95dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.3">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/home_map" />

        <Button
            android:id="@+id/pick1"
            android:layout_width="34dp"
            android:layout_height="56dp"
            android:background="@drawable/top_deselected"
            app:layout_constraintBottom_toBottomOf="@+id/imageView"
            app:layout_constraintEnd_toEndOf="@+id/imageView"
            app:layout_constraintHorizontal_bias="0.17"
            app:layout_constraintStart_toStartOf="@+id/imageView"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.18" />

        <Button
            android:id="@+id/pick2"
            android:layout_width="34dp"
            android:layout_height="56dp"
            android:background="@drawable/jungle_deselected"
            app:layout_constraintBottom_toBottomOf="@+id/imageView"
            app:layout_constraintEnd_toEndOf="@+id/imageView"
            app:layout_constraintHorizontal_bias="0.28"
            app:layout_constraintStart_toStartOf="@+id/imageView"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.367" />

        <Button
            android:id="@+id/pick3"
            android:layout_width="34dp"
            android:layout_height="56dp"
            android:background="@drawable/mid_deselected"
            app:layout_constraintBottom_toBottomOf="@+id/imageView"
            app:layout_constraintEnd_toEndOf="@+id/imageView"
            app:layout_constraintHorizontal_bias="0.424"
            app:layout_constraintStart_toStartOf="@+id/imageView"
            app:layout_constraintTop_toTopOf="@+id/imageView"
            app:layout_constraintVertical_bias="0.43" />

        <Button
            android:id="@+id/pick4"
            android:layout_width="34dp"
            android:layout_height="56dp"
            android:background="@drawable/support_deselected"
            app:layout_constraintBottom_toBottomOf="@+id/imageView"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.615"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="@+id/imageView"
            app:layout_constraintVertical_bias="0.71" />

        <Button
            android:id="@+id/pick5"
            android:layout_width="34dp"
            android:layout_height="56dp"
            android:background="@drawable/adc_deselected"
            app:layout_constraintBottom_toBottomOf="@+id/imageView"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.733"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="@+id/imageView"
            app:layout_constraintVertical_bias="0.71" />

    </android.support.constraint.ConstraintLayout>

    <Button
        android:layout_width="335dp"
        android:layout_height="42.5dp"
        android:layout_marginBottom="5.5dp"
        android:background="@drawable/home_mode"
        android:id="@+id/home_mode"/>

    <Button
        android:layout_width="335dp"
        android:layout_height="42.5dp"
        android:background="@drawable/home_match"
        android:id="@+id/home_match"/>

</LinearLayout>

约束布局曾经是框架布局,但我现在是在尝试约束布局。

【问题讨论】:

  • 尝试使用 sp 而不是 dp。 read this link
  • 使用 sp 似乎并没有解决问题……它实际上改变了布局大小。
  • 你能把布局文件贴出来让我们看看吗?一般来说,使用“sp”作为字体大小,使用“dp”作为其他尺寸应该可以正常工作。
  • 我将代码添加到我的问题中。谢谢。

标签: android xml layout


【解决方案1】:

您也可以使用这个库,它适用于所有设备,无需制作任何 dimen 文件。但仅将其用于小部件的大小,对于文本大小仅使用“sp”。

https://github.com/intuit/sdp

【讨论】:

  • 感谢您的评论。我目前正在尝试使用这个库。
  • 谢谢!图书馆似乎完成了这项工作!
  • 不错,我正在找它。谢谢
猜你喜欢
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
  • 2012-01-12
  • 2013-02-14
相关资源
最近更新 更多