在ListView中设置项目的边距

时间:2011-06-21 19:38:19

标签: android android-layout

问题

我正在尝试创建一个ListView,您可以通过拖动对项目进行重新排序 这涉及隐藏您从列表中拖动的项目但是项目无法完全隐藏(将高度设置为0或将可见性设置为GONE不执行任何操作)所以我将可见性设置为INVISIBLE并将高度设置为1但是,当然,拖动时会引起一个小跳跃。

解决方案

为了解决这个问题,我的目标是在项目上设置负边距,将其拉出一个像素 但问题出在这里,你不能在通用视图上设置边距,或者你不能在代码中设置边距。

你可以在XML中设置一个边距,它可以正常工作,但不能在代码中工作,有什么方法吗?

3 个答案:

答案 0 :(得分:1)

如果要在代码中为视图设置边距,请将它们设置为LayoutParms。例如:

View v; // let's guess you have this view... then
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) v.getLayoutParams();
layoutParams.setMargins(1, 2, 3, 4);

它适用于LinearLayout内的视图。你可以这样做,或者:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(etc..);
layoutParams.setMargins(1, 2, 3, 4);
parent.addView(view, layoutParams);

答案 1 :(得分:1)

我最终使用了适配器的包装器。

适配器为我移动“洞”,而不是为拖动视图创建空间。

由于边距在android中不能很好地工作,我不想使用它们,填充仍然会留下微小的1px跳跃,我认为适配器是唯一的好解决方案。

答案 2 :(得分:0)

根据我的经验,我认为嵌入式LinearLayout是一个可接受的解决方案,而不是理想的解决方案,因为它可能会导致性能方面的过度绘制问题。但它可以使用。

<?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="wrap_content"
    android:orientation="horizontal"
    android:padding="@dimen/list_item_surrounding_pad" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/module_entry_settings_item_background"
        android:orientation="horizontal"
        android:soundEffectsEnabled="true" >

        <ImageView
            android:id="@+id/list_item_document_source_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >
        </ImageView>

        <TextView
            android:id="@+id/list_item_document_source_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:gravity="center_vertical"
            android:minHeight="?android:attr/listPreferredItemHeight"
            android:soundEffectsEnabled="true"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textSize="@dimen/drawer_text_font_size" />
    </LinearLayout>

</LinearLayout>