约束布局在应用 运行 时不显示来自 ImageView 的图像
Constraint layout not showing image from ImageView when app run
我正在尝试通过 ImageView 在 Android Activity(ConstraintLayout) 中添加一些图像,
在 Android Studio 预览屏幕上,它可以正确显示图像,但是当我 运行 在真实设备或模拟器上运行该应用程序时,它没有显示图像。
下面是我正在使用的代码,
<?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"
tools:context="com.vchamps.android.staffast.ProfessionalsCalc"
android:background="@color/colorPrimary">
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guidelineVertical1"
app:layout_constraintGuide_percent="0.1"
android:orientation="vertical"
tools:layout_editor_absoluteY="0dp"
tools:layout_editor_absoluteX="39dp" />
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guidelineVertical2"
app:layout_constraintGuide_percent="0.25"
android:orientation="vertical"
tools:layout_editor_absoluteY="0dp"
tools:layout_editor_absoluteX="96dp" />
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guidelineHorizontal"
app:layout_constraintGuide_begin="87dp"
android:orientation="horizontal"
tools:layout_editor_absoluteY="87dp"
tools:layout_editor_absoluteX="0dp" />
<ImageView
android:visibility="visible"
android:id="@+id/imgRate"
android:layout_width="@dimen/rates_icon_size"
android:layout_height="@dimen/rates_icon_size"
app:srcCompat="@drawable/icon_rates"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
app:layout_constraintTop_toTopOf="@+id/guidelineHorizontal"
android:layout_marginTop="27dp"
android:layout_marginLeft="0dp"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical1"
/>
<ImageView
android:visibility="visible"
android:id="@+id/imgSchedule"
android:layout_width="@dimen/rates_icon_size"
android:layout_height="@dimen/rates_icon_size"
app:srcCompat="@drawable/icon_schedule"
android:layout_marginTop="10dp"
app:layout_constraintTop_toBottomOf="@+id/imgRate"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical1"
android:scaleType="fitCenter"
/>
<ImageView
android:visibility="visible"
android:id="@+id/imgPayout"
android:layout_width="36dp"
android:layout_height="36dp"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical1"
app:srcCompat="@drawable/icon_payout"
android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/imgSchedule"
android:scaleType="fitCenter"
/>
<TextView
android:id="@+id/tvRate"
style="@style/fontRateScreenTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="33dp"
android:text="Industry Leading Rates"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical2"
app:layout_constraintTop_toTopOf="@+id/guidelineHorizontal" />
<TextView
android:id="@+id/tvSchedule"
style="@style/fontRateScreenTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="44dp"
android:text="Flexible Schedule"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical2"
app:layout_constraintTop_toTopOf="@+id/tvRate" />
<TextView
android:id="@+id/tvPayout"
style="@style/fontRateScreenTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:text="Quick and Easy Payout"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical2"
app:layout_constraintTop_toTopOf="@+id/tvSchedule" />
<Button
android:id="@+id/btnWork"
style="@style/ButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:text="CLICK ME"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp" />
</android.support.constraint.ConstraintLayout>
在Android Studio中的UI预览如下,
我们可以看到这里显示了 3 张图片,
但是当我 运行 模拟器或真实设备上的应用程序时,它没有显示 3 个图像中的任何一个。下面是模拟器的截图,
- @dimen/rates_icon_size 的值:36dp
- 三个图像尺寸,
- icon_rates:87x59 像素
- icon_schedule:88x78 像素
- icon_payout:60x82 像素
请通过提供查询的解决方案来帮助我,在此先感谢。
在 ImageView 中而不是使用 srcCompact 使用 src
<ImageView
android:visibility="visible"
android:id="@+id/imgRate"
android:layout_width="@dimen/rates_icon_size"
android:layout_height="@dimen/rates_icon_size"
app:src="@drawable/icon_rates"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
app:layout_constraintTop_toTopOf="@+id/guidelineHorizontal"
android:layout_marginTop="27dp"
android:layout_marginLeft="0dp"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical1"
/>
而不是
<ImageView
android:visibility="visible"
android:id="@+id/imgRate"
android:layout_width="@dimen/rates_icon_size"
android:layout_height="@dimen/rates_icon_size"
app:srcCompat="@drawable/icon_rates"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
app:layout_constraintTop_toTopOf="@+id/guidelineHorizontal"
android:layout_marginTop="27dp"
android:layout_marginLeft="0dp"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical1"
/>
我认为你的图片有问题。至少这不是一个优雅的解决方案。
如果您的应用程序应该 运行 在不同的设备上,那么您应该使用 Android Vector Drawables 而不是正常的 PNG 图片。使用矢量可绘制对象而不是位图可以减小 APK 的大小,因为可以针对不同的屏幕密度调整同一文件的大小,而不会降低图像质量。
如果你想使用你的图像,那么你应该首先将它们转换为 SVG 格式(例如使用 Inkscape 它是免费的),然后使用 this 免费在线工具转换为 Vector Drawable 格式。
第二种解决方案是使用 Material Design Icons。它们由众多设计师共同开发,以确保良好的用户体验,并且还提供矢量绘图格式。
我用矢量绘图尝试了你的代码,应用程序显示图像没有问题。
有时使用 android:src="@drawable/icon_rates"
app:srcCompat="@drawable/icon_rates"
无效。
<ImageView
android:visibility="visible"
android:id="@+id/imgRate"
android:layout_width="@dimen/rates_icon_size"
android:layout_height="@dimen/rates_icon_size"
android:src="@drawable/icon_rates"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
app:layout_constraintTop_toTopOf="@+id/guidelineHorizontal"
android:layout_marginTop="27dp"
android:layout_marginLeft="0dp"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical1"
/>
我正在尝试通过 ImageView 在 Android Activity(ConstraintLayout) 中添加一些图像, 在 Android Studio 预览屏幕上,它可以正确显示图像,但是当我 运行 在真实设备或模拟器上运行该应用程序时,它没有显示图像。
下面是我正在使用的代码,
<?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"
tools:context="com.vchamps.android.staffast.ProfessionalsCalc"
android:background="@color/colorPrimary">
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guidelineVertical1"
app:layout_constraintGuide_percent="0.1"
android:orientation="vertical"
tools:layout_editor_absoluteY="0dp"
tools:layout_editor_absoluteX="39dp" />
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guidelineVertical2"
app:layout_constraintGuide_percent="0.25"
android:orientation="vertical"
tools:layout_editor_absoluteY="0dp"
tools:layout_editor_absoluteX="96dp" />
<android.support.constraint.Guideline
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/guidelineHorizontal"
app:layout_constraintGuide_begin="87dp"
android:orientation="horizontal"
tools:layout_editor_absoluteY="87dp"
tools:layout_editor_absoluteX="0dp" />
<ImageView
android:visibility="visible"
android:id="@+id/imgRate"
android:layout_width="@dimen/rates_icon_size"
android:layout_height="@dimen/rates_icon_size"
app:srcCompat="@drawable/icon_rates"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
app:layout_constraintTop_toTopOf="@+id/guidelineHorizontal"
android:layout_marginTop="27dp"
android:layout_marginLeft="0dp"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical1"
/>
<ImageView
android:visibility="visible"
android:id="@+id/imgSchedule"
android:layout_width="@dimen/rates_icon_size"
android:layout_height="@dimen/rates_icon_size"
app:srcCompat="@drawable/icon_schedule"
android:layout_marginTop="10dp"
app:layout_constraintTop_toBottomOf="@+id/imgRate"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical1"
android:scaleType="fitCenter"
/>
<ImageView
android:visibility="visible"
android:id="@+id/imgPayout"
android:layout_width="36dp"
android:layout_height="36dp"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical1"
app:srcCompat="@drawable/icon_payout"
android:layout_marginTop="8dp"
app:layout_constraintTop_toBottomOf="@+id/imgSchedule"
android:scaleType="fitCenter"
/>
<TextView
android:id="@+id/tvRate"
style="@style/fontRateScreenTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="33dp"
android:text="Industry Leading Rates"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical2"
app:layout_constraintTop_toTopOf="@+id/guidelineHorizontal" />
<TextView
android:id="@+id/tvSchedule"
style="@style/fontRateScreenTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="44dp"
android:text="Flexible Schedule"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical2"
app:layout_constraintTop_toTopOf="@+id/tvRate" />
<TextView
android:id="@+id/tvPayout"
style="@style/fontRateScreenTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:text="Quick and Easy Payout"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical2"
app:layout_constraintTop_toTopOf="@+id/tvSchedule" />
<Button
android:id="@+id/btnWork"
style="@style/ButtonStyle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:text="CLICK ME"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp" />
</android.support.constraint.ConstraintLayout>
在Android Studio中的UI预览如下,
我们可以看到这里显示了 3 张图片,
但是当我 运行 模拟器或真实设备上的应用程序时,它没有显示 3 个图像中的任何一个。下面是模拟器的截图,
- @dimen/rates_icon_size 的值:36dp
- 三个图像尺寸,
- icon_rates:87x59 像素
- icon_schedule:88x78 像素
- icon_payout:60x82 像素
请通过提供查询的解决方案来帮助我,在此先感谢。
在 ImageView 中而不是使用 srcCompact 使用 src
<ImageView
android:visibility="visible"
android:id="@+id/imgRate"
android:layout_width="@dimen/rates_icon_size"
android:layout_height="@dimen/rates_icon_size"
app:src="@drawable/icon_rates"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
app:layout_constraintTop_toTopOf="@+id/guidelineHorizontal"
android:layout_marginTop="27dp"
android:layout_marginLeft="0dp"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical1"
/>
而不是
<ImageView
android:visibility="visible"
android:id="@+id/imgRate"
android:layout_width="@dimen/rates_icon_size"
android:layout_height="@dimen/rates_icon_size"
app:srcCompat="@drawable/icon_rates"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
app:layout_constraintTop_toTopOf="@+id/guidelineHorizontal"
android:layout_marginTop="27dp"
android:layout_marginLeft="0dp"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical1"
/>
我认为你的图片有问题。至少这不是一个优雅的解决方案。
如果您的应用程序应该 运行 在不同的设备上,那么您应该使用 Android Vector Drawables 而不是正常的 PNG 图片。使用矢量可绘制对象而不是位图可以减小 APK 的大小,因为可以针对不同的屏幕密度调整同一文件的大小,而不会降低图像质量。
如果你想使用你的图像,那么你应该首先将它们转换为 SVG 格式(例如使用 Inkscape 它是免费的),然后使用 this 免费在线工具转换为 Vector Drawable 格式。
第二种解决方案是使用 Material Design Icons。它们由众多设计师共同开发,以确保良好的用户体验,并且还提供矢量绘图格式。
我用矢量绘图尝试了你的代码,应用程序显示图像没有问题。
有时使用 android:src="@drawable/icon_rates"
app:srcCompat="@drawable/icon_rates"
无效。
<ImageView
android:visibility="visible"
android:id="@+id/imgRate"
android:layout_width="@dimen/rates_icon_size"
android:layout_height="@dimen/rates_icon_size"
android:src="@drawable/icon_rates"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
app:layout_constraintTop_toTopOf="@+id/guidelineHorizontal"
android:layout_marginTop="27dp"
android:layout_marginLeft="0dp"
app:layout_constraintLeft_toLeftOf="@+id/guidelineVertical1"
/>