android - 根据父级高度调整 Imageview 的大小

标签 android android-layout imageview android-custom-view

我有一个如下定义的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:orientation="vertical" >


        <ImageView
            android:id="@+id/movieImageView"
            android:layout_width="75dp"
            android:layout_height="75dp"
            android:layout_centerVertical="true"
            android:paddingBottom="5dp"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="5dp"
            android:src="@drawable/blank_96_1382x" /> 

        <TextView
            android:id="@+id/movieTypeView"
            android:layout_width="75dp"
            android:layout_height="wrap_content"
            android:layout_below="@+id/movieImageView"
            android:layout_alignLeft="@+id/movieImageView"
            android:maxLines="1"
            android:text="Tv Series"
            android:textColor="@color/gray"
            android:textSize="12sp" 
            android:gravity="center"
            android:paddingTop="3dp"
            android:paddingBottom="3dp"
            android:visibility="gone"
            android:textStyle="bold" />

   <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"    
            android:orientation="vertical"
            android:layout_centerVertical="true"
            android:layout_marginBottom="5dp"
            android:layout_marginTop="5dp"
            android:layout_toRightOf="@id/movieImageView"
            android:layout_marginLeft="5dp">

                <TextView
                    android:id="@+id/movieTitleView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"                        
                    android:maxLines="3"
                    android:text="Shutter Island starring leonardo di caprio"
                    android:textColor="@color/white"
                    android:textSize="17sp"
                    android:textStyle="bold"
                    android:typeface="sans" />


        ...
</RelativeLayout>

看起来像这样 enter image description here

我希望 ImageView 根据 ImageView 左侧的内容缩小。例如,如果缺少几个字段并且字段的高度总和小于图像高度,那么它应该缩小(如下所示)。

enter image description here

如果图像左侧字段的高度总和大于指定的图像高度,则应保持指定的高度,如下所示 enter image description here

我尝试扩展 imageview 并更改 ImageView 的高度/宽度,重新设置图像的纵横比,如此处所述custom image view .但问题是,MeasureSpec.getSize(heightMeasureSpec) 返回的父级高度不会返回左侧字段占用的确切高度(因为只有在所有子级的 onMeasure 返回后才可用)。所以这种方法并没有带我去任何地方。

我怎样才能实现这种期望的行为?

最佳答案

您应该将 imageView 与线性布局中的 TextView 对齐。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true" >

    <LinearLayout
        android:id="@+id/lnrTextViews"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="5dp"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#cee"
            android:gravity="center"
            android:maxLines="1"
            android:paddingBottom="3dp"
            android:paddingTop="3dp"
            android:text="Tv Series"
            android:textColor="#fff"
            android:textSize="12sp"
            android:textStyle="bold"
            android:visibility="visible" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="#f00"
            android:gravity="center"
            android:maxLines="1"
            android:paddingBottom="3dp"
            android:paddingTop="3dp"
            android:text="Tv Series"
            android:textColor="#fff"
            android:textSize="12sp"
            android:textStyle="bold"
            android:visibility="visible" />
    </LinearLayout>

    <ImageView
        android:id="@+id/movieImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/lnrTextViews"
        android:layout_alignTop="@id/lnrTextViews"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="5dp"
        android:paddingBottom="5dp"
        android:src="@drawable/songs" />

</RelativeLayout>

复制粘贴此代码并添加一些不同大小的图像和额外的 TextView 。

关于android - 根据父级高度调整 Imageview 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16540550/

相关文章:

java - 每个操作返回一个部门

java - 在多个设备之间共享单个谷歌地图

android - 如何在约束布局中创建更小的按钮

Android使用路径中的空间和通用图像加载器加载本地镜像

android - 在 Touch Android 上具有拖动、滚动和缩放功能的三角形 ImageView

android - 了解 appcompact values-v11/themes_base.xml 错误

Android Spinner 跳转到之前选择的位置

android - 当我使用另一个 Activity 返回到它时,我增加的变量会自行重置

android - Android 上带有远程 View 的自定义通知

android - ViewPager + picasso