【问题标题】:Resize Imageview based on the parent height根据父高度调整 Imageview 的大小
【发布时间】:2013-05-08 13:53:33
【问题描述】:

我有一个如下定义的布局

<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>

看起来像这样

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

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

我尝试扩展图像视图并更改图像视图的高度/宽度,从而满足图像的纵横比,如custom image view 所述。但问题是,MeasureSpec.getSize(heightMeasureSpec) 返回的父高度不会返回左侧字段占用的确切高度(因为只有在返回所有子项的 onMeasure 后才可用)。所以这种方法并没有把我带到任何地方。

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

【问题讨论】:

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


    【解决方案1】:

    您应该将 imageView 与线性布局中的文本视图对齐。

    <?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>
    

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

    【讨论】:

      【解决方案2】:

      这需要使用代码来完成。您需要在屏幕呈现几毫秒后调用这些大小的 API。因此,如果您在 100 毫秒后调用它,使用已呈现的任何视图的 postDelayed 方法,您将获得大小。

      【讨论】:

        【解决方案3】:

        这样试试

        <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:padding_top = "10dp"
        android:padding_bottom = "10dp"
        android:padding_left = "10dp"
        android:orientation="vertical" >
        
        
            <ImageView
                android:id="@+id/movieImageView"
                android:layout_width="75dp"
                android:layout_height="match_parent"
                android:layout_centerVertical="true"
                android:paddingBottom="5dp"
                android:layout_marginLeft="5dp"
                android:layout_marginTop="5dp"
                android:src="@drawable/blank_96_1382x" /> 
        

        【讨论】:

          【解决方案4】:

          试试这个...

          <LinearLayout 
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:orientation="horizontal">
          
              <LinearLayout 
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:padding="5dp"
                  >
          
                  <ImageView 
                      android:id="@+id/ivOne"
                      android:src="@drawable/ic_launcher"
                      android:layout_width="90dp"  
                      android:layout_height="90dp"  // you can check by changing the values.
                      android:layout_marginLeft="10dp"
                      android:layout_marginTop="10dp"
                      android:layout_marginBottom="10dp"
                      android:padding="5dp"
          
                      />
          
              </LinearLayout>
          
              <LinearLayout 
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:orientation="vertical"
                  android:layout_gravity="center|center_horizontal">
          
                  <EditText 
                      android:id="@+id/etOne"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:hint="Enter Text:"
                      android:textColorHint="#4584a1"
                      android:layout_margin="10dp"
                      android:textColor="#4584a1"
                      >
          
                  </EditText>
          
                 <EditText 
                      android:id="@+id/etTwo"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"
                      android:hint="Enter Text"
                      android:textColorHint="#4584a1"
                      android:layout_margin="10dp"
                      android:textColor="#4584a1"
                      >
          
                  </EditText>
          
              </LinearLayout>   
          
             </LinearLayout> 
          

          我希望它会有所帮助。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-09-18
            • 2016-05-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-28
            • 1970-01-01
            相关资源
            最近更新 更多