Imageview 在线性布局中不可见

Posted

技术标签:

【中文标题】Imageview 在线性布局中不可见【英文标题】:Imageview not visible at linear layout 【发布时间】:2020-01-26 08:22:33 【问题描述】:

我试图在我的线性布局中放置一个图像视图,但由于某种原因它似乎没有显示。

这是我的布局 xml 文件 -


<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_
    android:layout_
    android:orientation="vertical">

    <ImageView
        android:id="@+id/frag_discover_search_image_view"
        android:layout_
        android:layout_
        android:paddingStart="16dp"
        android:paddingEnd="16dp"
        android:src="@drawable/ic_icon_search_explore" />


    <com.omadahealth.github.swipyrefreshlayout.library.SwipyRefreshLayout
        android:id="@+id/frag_discover_swipe_refresh"
        android:layout_
        android:layout_
        app:srl_direction="bottom">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/frag_discover_recycler_view"
            android:layout_
            android:layout_
            android:layout_marginStart="8dp"
            android:layout_marginEnd="8dp"
            tools:listitem="@layout/row_video_insta" />
    </com.omadahealth.github.swipyrefreshlayout.library.SwipyRefreshLayout>

    <include layout="@layout/progress_bar" />
</LinearLayout>


这是我在预览中的布局 -

如您所见,在视图组的左上角有一个放置图像的位置,但我找不到它不可见且不可点击的原因。有任何想法吗?

这里是“ic_icon_search_explore”文件 -


<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:
    android:
    android:viewportWidth="16"
    android:viewportHeight="16">
  <path
      android:pathData="M-4,-4h24v24h-24z"
      android:strokeAlpha="0"
      android:strokeWidth="1"
      android:fillColor="#D8D8D8"
      android:fillType="nonZero"
      android:strokeColor="#00000000"
      android:fillAlpha="0"/>
  <path
      android:pathData="M6.8333,6.8333m-5.8333,0a5.8333,5.8333 0,1 1,11.6667 0a5.8333,5.8333 0,1 1,-11.6667 0"
      android:strokeLineJoin="round"
      android:strokeWidth="1.5"
      android:fillColor="#00000000"
      android:strokeColor="#FFFFFF"
      android:fillType="evenOdd"
      android:strokeLineCap="round"/>
  <path
      android:pathData="M15,15L10.9556,10.9556"
      android:strokeLineJoin="round"
      android:strokeWidth="1.5"
      android:fillColor="#00000000"
      android:strokeColor="#FFFFFF"
      android:fillType="evenOdd"
      android:strokeLineCap="round"/>
</vector>


【问题讨论】:

为您的ImageView提供权重。 使用app:srcCompat而不是android:src,因为它是svg文件。 一个好心的建议,使用 ConstraintLayout 而不是 Linear。 【参考方案1】:

不可见,因为您在 ImageView 内设置了填充,填充是按大小压缩图像。当您设置矢量图像高度宽度时,将 ImageView 高度宽度设置为 wrap_content

删除填充:-

android:paddingStart="16dp"
android:paddingEnd="16dp"

试试这个 ImageView:-

<ImageView
     android:id="@+id/frag_discover_search_image_view"
     android:layout_
     android:layout_
     android:src="@drawable/ic_icon_search_explore" />

【讨论】:

【参考方案2】:

使用这个drawable。您只需更改图标的颜色即可。

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:
        android:
        android:viewportWidth="16"
        android:viewportHeight="16">
    <path
            android:pathData="M-4,-4h24v24h-24z"
            android:strokeAlpha="0"
            android:strokeWidth="1"
            android:fillColor="#000"
            android:fillType="nonZero"
            android:strokeColor="#00000000"
            android:fillAlpha="0"/>
    <path
            android:pathData="M6.8333,6.8333m-5.8333,0a5.8333,5.8333 0,1 1,11.6667 0a5.8333,5.8333 0,1 1,-11.6667 0"
            android:strokeLineJoin="round"
            android:strokeWidth="1.5"
            android:fillColor="#00000000"
            android:strokeColor="#000"
            android:fillType="evenOdd"
            android:strokeLineCap="round"/>
    <path
            android:pathData="M15,15L10.9556,10.9556"
            android:strokeLineJoin="round"
            android:strokeWidth="1.5"
            android:fillColor="#00000000"
            android:strokeColor="#000"
            android:fillType="evenOdd"
            android:strokeLineCap="round"/>
</vector>

您的图片清晰可见,但图片颜色为白色,因此未在布局中显示。

【讨论】:

【参考方案3】:

你的布局没有问题

问题在于您的ic_icon_search_explore 图标颜色

您的图标和布局的颜色是白色的,这就是您的图标未显示在布局中的原因

只需更改ic_icon_search_explore 的图标颜色即可使用

 <?xml version="1.0" encoding="utf-8"?>
    <vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:
        android:
        android:viewportWidth="16"
        android:viewportHeight="16">
    <path
            android:pathData="M-4,-4h24v24h-24z"
            android:strokeAlpha="0"
            android:strokeWidth="1"
            android:fillColor="#D8D8D8"
            android:fillType="nonZero"
            android:strokeColor="#00000000"
            android:fillAlpha="0"/>
    <path
            android:pathData="M6.8333,6.8333m-5.8333,0a5.8333,5.8333 0,1 1,11.6667 0a5.8333,5.8333 0,1 1,-11.6667 0"
            android:strokeLineJoin="round"
            android:strokeWidth="1.5"
            android:fillColor="#00000000"
            android:strokeColor="#ff00"
            android:fillType="evenOdd"
            android:strokeLineCap="round"/>
    <path
            android:pathData="M15,15L10.9556,10.9556"
            android:strokeLineJoin="round"
            android:strokeWidth="1.5"
            android:fillColor="#00000000"
            android:strokeColor="#ff00"
            android:fillType="evenOdd"
            android:strokeLineCap="round"/>
</vector>

【讨论】:

以上是关于Imageview 在线性布局中不可见的主要内容,如果未能解决你的问题,请参考以下文章

ImageView 未在滚动视图内的线性布局中显示

如何设置滚动视图内并包含两个 TextView 的线性布局的可见性消失?

如何在线性布局中居中内容?

当可见性设置为Gone或Visible时,如何排列线性布局?

在线性布局中对齐元素

如何在 Android 上使图像透明?