Android Activity 15 个测试设备中只有 1 个存在布局问题 (ImageView)
Android Activity Layout-Problem on only 1 of 15 test-devices (ImageView)
我正在 Android 应用程序中测试新的 activity。在除一台设备外的所有设备上,一切都很好 - 除了华为 P30 Pro。
activity 非常简单:它在底部显示一个 ImageView 和一个小菜单栏。在设置图像之前,会显示一个 ProgressBar(旋转的圆圈)。
在Huawei P30 Pro上,似乎一切正常(ProgressBar出现,圆圈旋转,ProgressBar消失),但没有图像可见。如果您通过按菜单栏中的应用按钮转发图像,图像会正确转发,因此它实际上是可用的,它只是没有在 activity.
中显示
我们在其他几台设备(包括华为 P10、P20、几款三星手机和 HTC)上测试了相同版本的应用程序,一切正常。但是在我们手头的两款华为P30 Pro上,都出现了同样的问题。
布局代码非常简单:
<LinearLayout 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="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_weight="10">
<LinearLayout
android:layout_height="0dp"
android:layout_width="fill_parent"
android:layout_weight="9"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:srcCompat="@tools:sample/avatars"
android:contentDescription="Image preview"/>
<ProgressBar
android:id="@+id/indeterminateBar"
android:indeterminate="true"
android:minWidth="100dp"
android:minHeight="100dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerInParent="true"
/>
</RelativeLayout>
</LinearLayout
android:layout_height="0dp">
<LinearLayout
android:layout_height="0dp"
android:layout_width="fill_parent"
android:layout_weight="1">
<!-- bottom menu-bar-code is here as a TableLayout, which works fine on all devices -->
</LinearLayout>
</LinearLayout>
也许 ImageView 的高度为 0,所以它不可见?
我对它可能是什么感到困惑,因为它只是那个特定的设备...
我检查了 ImageView-drawable 是否正确设置了 (imageView.getDrawable() != null) 并且看起来确实如此(它不是 null),以及可见性状态,这好像也还好。
所以在这一点上,我认为这是一个纯粹的布局问题。
我强烈建议从 LinearLayout 切换到 ConstraintLayout。即使您当前的布局适用于 15 台设备中的 14 台,底部菜单的高度始终为 10%,这在高度较小的设备上看起来不太好(您是否尝试过横向布局?您会明白我的意思) .
切换到 ConstraintLayout 后,您在第 15 台设备上的布局问题应该也会消失。
我将您的布局转换为使用 ConstraintLayout 来展示它的外观。里面的布局也比较少。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:contentDescription="Image preview"
app:layout_constraintBottom_toTopOf="@id/bottomMenuBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:srcCompat="@tools:sample/avatars" />
<ProgressBar
android:id="@+id/indeterminateBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:minWidth="100dp"
android:minHeight="100dp"
app:layout_constraintBottom_toTopOf="@+id/bottomMenuBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/bottomMenuBar"
android:layout_width="fill_parent"
android:layout_height="50dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<!-- bottom menu-bar-code is here as a TableLayout, which works fine on all devices -->
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
请注意,出于在布局预览中的可见性原因,我为底部菜单的 LinearLayout 添加了固定高度。一旦您了解了 ConstraintLayout,您还应该为菜单栏更改它。我将其保留为 LinearLayout,以便更轻松地与您的实际布局代码一起使用。
我正在 Android 应用程序中测试新的 activity。在除一台设备外的所有设备上,一切都很好 - 除了华为 P30 Pro。
activity 非常简单:它在底部显示一个 ImageView 和一个小菜单栏。在设置图像之前,会显示一个 ProgressBar(旋转的圆圈)。
在Huawei P30 Pro上,似乎一切正常(ProgressBar出现,圆圈旋转,ProgressBar消失),但没有图像可见。如果您通过按菜单栏中的应用按钮转发图像,图像会正确转发,因此它实际上是可用的,它只是没有在 activity.
中显示我们在其他几台设备(包括华为 P10、P20、几款三星手机和 HTC)上测试了相同版本的应用程序,一切正常。但是在我们手头的两款华为P30 Pro上,都出现了同样的问题。
布局代码非常简单:
<LinearLayout 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="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_weight="10">
<LinearLayout
android:layout_height="0dp"
android:layout_width="fill_parent"
android:layout_weight="9"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:srcCompat="@tools:sample/avatars"
android:contentDescription="Image preview"/>
<ProgressBar
android:id="@+id/indeterminateBar"
android:indeterminate="true"
android:minWidth="100dp"
android:minHeight="100dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerInParent="true"
/>
</RelativeLayout>
</LinearLayout
android:layout_height="0dp">
<LinearLayout
android:layout_height="0dp"
android:layout_width="fill_parent"
android:layout_weight="1">
<!-- bottom menu-bar-code is here as a TableLayout, which works fine on all devices -->
</LinearLayout>
</LinearLayout>
也许 ImageView 的高度为 0,所以它不可见? 我对它可能是什么感到困惑,因为它只是那个特定的设备...
我检查了 ImageView-drawable 是否正确设置了 (imageView.getDrawable() != null) 并且看起来确实如此(它不是 null),以及可见性状态,这好像也还好。 所以在这一点上,我认为这是一个纯粹的布局问题。
我强烈建议从 LinearLayout 切换到 ConstraintLayout。即使您当前的布局适用于 15 台设备中的 14 台,底部菜单的高度始终为 10%,这在高度较小的设备上看起来不太好(您是否尝试过横向布局?您会明白我的意思) .
切换到 ConstraintLayout 后,您在第 15 台设备上的布局问题应该也会消失。
我将您的布局转换为使用 ConstraintLayout 来展示它的外观。里面的布局也比较少。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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">
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:contentDescription="Image preview"
app:layout_constraintBottom_toTopOf="@id/bottomMenuBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:srcCompat="@tools:sample/avatars" />
<ProgressBar
android:id="@+id/indeterminateBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:minWidth="100dp"
android:minHeight="100dp"
app:layout_constraintBottom_toTopOf="@+id/bottomMenuBar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:id="@+id/bottomMenuBar"
android:layout_width="fill_parent"
android:layout_height="50dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<!-- bottom menu-bar-code is here as a TableLayout, which works fine on all devices -->
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
请注意,出于在布局预览中的可见性原因,我为底部菜单的 LinearLayout 添加了固定高度。一旦您了解了 ConstraintLayout,您还应该为菜单栏更改它。我将其保留为 LinearLayout,以便更轻松地与您的实际布局代码一起使用。