Установка полей для элемента в ListView - PullRequest
1 голос
/ 21 июня 2011

Проблема

Я пытаюсь создать ListView, где вы можете изменить порядок элементов, перетаскивая их.
Это включает в себя скрытие элемента, который вы перетаскиваете из списка, но элемент не может быть полностью скрыт (установка высоты на 0 или установка видимости на GONE ничего не делает), поэтому вместо этого я устанавливаю видимость на INVISIBLE, а высоту на 1, но это, конечно, вызывает небольшой скачок при перетаскивании.

Решение

Чтобы бороться с этим, моя цель состоит в том, чтобы установить отрицательное поле для элемента, который тянет его на один пиксель.
Однако возникает проблема: вы не можете устанавливать поля в общем виде, или, скорее, вы не можете это сделатьв коде.

Вы можете установить поле в XML, и оно будет работать нормально, но не в коде, есть ли способ обойти это?

Ответы [ 3 ]

1 голос
/ 22 июня 2011

Вместо этого я использовал оболочку для адаптера.

Адаптер перемещает «дыру» для меня вместо того, чтобы создать место для перетаскиваемого вида.

Поскольку поля не очень хорошо работают в Android, я не хочу их использовать, а отступы все равно оставят крошечный скачок в 1 пиксель, я думаю, что адаптер - единственное хорошее решение.

1 голос
/ 21 июня 2011

Если вы хотите установить поля для представления в коде, вы устанавливаете их на 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);
0 голосов
/ 12 февраля 2014

Исходя из моего опыта, я думаю, что встроенный 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...