Android - 如何构建一个布局,当一个组件隐藏时,另一个组件可以覆盖它

时间:2015-03-06 13:47:00

标签: android android-layout

需求是:

  • 有一个listitem,我想添加两个组件(一个imageview,一个 复选框)。
  • 在默认情况下,当我长按时,会显示图像视图 listitem,imageview设置为不可见,复选框可见

我想以适当的方式构建listitem的布局,我尝试了包含两者的relativelayout,并设置了两个android:visibility=gone,但它不起作用。 我想问题存在于以下几个方面:

  1. relativelayout的字段是错误的,然后怎么写呢?
  2. 应该尝试像framelayout这样的其他布局吗?
  3. listitem布局如下:

     <?xml version="1.0" encoding="UTF-8"?>
    <LinearLayout 
       xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="fill_parent"
       android:layout_height="72dp"
       android:orientation="horizontal"
       android:layout_gravity="center_horizontal">
    
    
    <ImageButton
        android:id="@+id/ibClinicMessageLeft"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    
        android:layout_gravity="center"
        android:layout_marginLeft="16dp"
    
        />
    
    <!-- item中的text,subtext和时间 -->
    <LinearLayout
        android:id="@+id/llTotalText"
        android:layout_toRightOf="@id/ibClinicMessageLeft"
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content">
        <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
            <TextView
                android:id="@+id/tvClinicMessagetTitle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="16dp"
                android:layout_marginTop="20dp"
                android:layout_toRightOf="@id/ibClinicMessageLeft"
                android:layout_centerVertical="true"
                android:typeface="sans"
                android:textColor="@color/text"
                android:textSize="16sp" />
    
            <TextView
                android:id="@+id/tvClinicMessageTime"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="16dp"
                android:layout_marginTop="20dp"
                android:layout_centerVertical="true"
                android:typeface="sans"
                android:textColor="@color/hint"
                android:textSize="12sp" />
        </LinearLayout>
    
        <TextView
            android:id="@+id/tvClinicMessageText"
            android:ellipsize="marquee"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dp"
            android:layout_marginTop="6dp"
            android:layout_marginLeft="16dp"
            android:layout_below="@id/tvClinicMessagetTitle"
            android:layout_toRightOf="@+id/ibClinicMessageLeft"
    
            android:typeface="sans"
            android:textColor="@color/subtext"
            android:textSize="14sp" />
    
    </LinearLayout>
    
    
    
     <RelativeLayout
        android:layout_toRightOf = "@id/llTotalText"
        android:layout_width ="wrap_content"
        android:layout_height ="fill_parent"
        >
    
        < CheckBox
               android:id ="@+id/cbCheckBox"
               android:layout_width ="wrap_content"
               android:layout_height ="wrap_content"
               android:visibility ="gone"
               android:clickable ="false"
               android:focusable ="false"
        />
    
    <!-- item中的箭头图片 -->
           < ImageView
               android:id ="@+id/ivItemArrow"
                      android:src ="@drawable/im_arrow"
    
               android:layout_width ="wrap_content"
               android:layout_height ="fill_parent"
               android:layout_centerVertical ="true"
                      android:layout_marginRight ="16dp"
               android:visibility ="gone"
               />
    
    
    
           </ RelativeLayout>
    
    
    
    </LinearLayout>
    

1 个答案:

答案 0 :(得分:0)

在这里,您要做的是将imageview的可见性设置为VISIBLE,而不是在列表视图中添加任何复选框。

然后在运行时,在List onItemClickListener中,将imageview的可见性设置为INVISIBLE并实例化一个复选框并将其设置为VISIBLE并将其置于所需位置。

这样的事情:

 CheckBox edt;

        edt = new CheckBox(this);
RelativeLayout.LayoutParams lp =
    new RelativeLayout.LayoutParams
    (
        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT
    );
lp.setMargins(25, 0, 0, 0); // move 25 px to right (increase left margin)
edt.setLayoutParams(lp); // lp.setMargins(left, top, right, bottom);

您可以将边距设置为您使用的图像视图。

像这样:

ImageView iv = (ImageView)findViewById(R.id.iv1);
RelativeLayout.LayoutParams newparam = iv.getLayoutParams();

那就是它。