如何在Android中实现此特定设计(扩展/加权子视图)?

时间:2015-12-02 07:44:05

标签: android android-layout

这就是我想要实现的目标:

design of my list view

但是,我不知道如何判断左侧视图是否至少增长到最小高度,还可以作为右视图。当我将高度设置为'match_parent'和'minHeight'时,这就是我得到的:

left view cropped

正如您在第一个项目中看到的那样,图像视图被裁剪。当我使用'wrap_content'时,从右视图和左视图都显示了所有内容,但我无法获得我想要的设计(图表放在底部,图像之间有空白空间):

left view weight is not correct

我错过了什么?这是用于列表项的XML布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

    <LinearLayout
        android:id="@+id/list_item_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="4dp">

        <LinearLayout
            android:id="@+id/list_item_left_layout"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:minHeight="98dp"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/avatar"
                android:layout_width="40dp"
                android:layout_height="40dp"
                android:src="@drawable/avatar"/>

            <LinearLayout
                android:id="@+id/list_item_overlay_layout"
                android:layout_width="wrap_content"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:gravity="bottom"
                android:orientation="vertical">

                <ImageView
                    android:id="@+id/chart"
                    android:layout_width="40dp"
                    android:layout_height="58dp"
                    android:src="@drawable/chart"/>

            </LinearLayout>

        </LinearLayout>

        <TextView
            android:id="@+id/item_text"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:maxLines="8"
            android:paddingLeft="8dp"
            android:paddingRight="8dp"/>

    </LinearLayout>

</LinearLayout>

3 个答案:

答案 0 :(得分:1)

您可以使用以下代码进行设计。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFF"
android:orientation="vertical">

<RelativeLayout
    android:id="@+id/list_item_main"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    android:orientation="horizontal"
    android:padding="4dp">

    <RelativeLayout

        android:id="@+id/relativeLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toEndOf="@+id/list_item_left_layout"
        android:layout_toRightOf="@+id/list_item_left_layout"
        android:minHeight="98dp"
        android:orientation="vertical">

        <TextView
            android:id="@+id/item_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:maxLines="8"
            android:paddingLeft="8dp"
            android:paddingRight="8dp"
            android:text="111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
            android:textColor="@android:color/darker_gray" />


    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/list_item_left_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:layout_alignBottom="@+id/relativeLayout"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/avatar"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentTop="true"
            android:src="@drawable/avatar" />


        <ImageView
            android:id="@+id/chart"
            android:layout_width="40dp"
            android:layout_height="58dp"
            android:layout_alignParentBottom="true"
            android:src="@drawable/common_signin_btn_icon_pressed_dark" />

    </RelativeLayout>


</RelativeLayout>


</LinearLayout>

答案 1 :(得分:0)

You can use Imageview.setTranslationX() or ImageView.setTranslationY() to move chart Imageview to new position.

Making a layout expandable is explained in this article from the blog. here[enter link description here][1]


  [1]: http://gmariotti.blogspot.in/2013/09/expand-and-collapse-animation.html

Hope it helps ..

答案 2 :(得分:0)

由于Mayur的回答,我找到了一个技巧。这不是解决方案,但我可以使用它作为解决方法,直到找到正确的方法。

  • 计算左视图的最小高度,并设置 minHeight正确的观点。结果,如果在文本中 右手边很小,它仍然会使用最少量的 高度。
  • 将左侧布局的高度设置为match_parent。现在这个 如果右视图,视图将展开以填充所有可用空间 增长为更大的文本提供空间。

这就是它的样子:

enter image description here

以下是我必须做的代码更改:

$ diff -U 5 list_item_layout_original.xml list_item_layout.xml 
--- list_item_layout_original.xml   2015-12-03 09:13:35.000000000 +1100
+++ list_item_layout.xml    2015-12-03 09:11:42.000000000 +1100
@@ -45,10 +45,11 @@
         <TextView
             android:id="@+id/item_text"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
+            android:minHeight="98dp"
             android:maxLines="8"
             android:paddingLeft="8dp"
             android:paddingRight="8dp"/>

     </LinearLayout>
相关问题