我正在尝试创建一个ListView,您可以通过拖动对项目进行重新排序 这涉及隐藏您从列表中拖动的项目但是项目无法完全隐藏(将高度设置为0或将可见性设置为GONE不执行任何操作)所以我将可见性设置为INVISIBLE并将高度设置为1但是,当然,拖动时会引起一个小跳跃。
为了解决这个问题,我的目标是在项目上设置负边距,将其拉出一个像素 但问题出在这里,你不能在通用视图上设置边距,或者你不能在代码中设置边距。
你可以在XML中设置一个边距,它可以正常工作,但不能在代码中工作,有什么方法吗?
答案 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>