Пользовательский интерфейс для переупорядочения элементы списка

Попробуйте это:

В сборке: gradle:

implementation 'com.google.zxing:core:3.2.1'
implementation 'com.journeyapps:zxing-android-embedded:3.2.0@aar'

А затем напишите свой собственный код, как показано ниже.

public class DemoActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout l = new LinearLayout(this);
        l.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
        l.setOrientation(LinearLayout.VERTICAL);

        setContentView(l);

        // barcode data
        String barcode_data = "123456viralpatel";

        // barcode image
        Bitmap bitmap = null;
        ImageView iv = new ImageView(this);

        try {

            bitmap = encodeAsBitmap(barcode_data, BarcodeFormat.CODE_128, 600, 300);
            iv.setImageBitmap(bitmap);

        } catch (WriterException e) {
            e.printStackTrace();
        }

        l.addView(iv);

        //barcode text
        TextView tv = new TextView(this);
        tv.setGravity(Gravity.CENTER_HORIZONTAL);
        tv.setText(barcode_data);

        l.addView(tv);

    }
    private static final int WHITE = 0xFFFFFFFF;
    private static final int BLACK = 0xFF000000;

    Bitmap encodeAsBitmap(String contents, BarcodeFormat format, int img_width, int img_height) throws WriterException {
        String contentsToEncode = contents;
        if (contentsToEncode == null) {
            return null;
        }
        Map<EncodeHintType, Object> hints = null;
        String encoding = guessAppropriateEncoding(contentsToEncode);
        if (encoding != null) {
            hints = new EnumMap<>(EncodeHintType.class);
            hints.put(EncodeHintType.CHARACTER_SET, encoding);
        }
        MultiFormatWriter writer = new MultiFormatWriter();
        BitMatrix result;
        try {
            result = writer.encode(contentsToEncode, format, img_width, img_height, hints);
        } catch (IllegalArgumentException iae) {
            // Unsupported format
            return null;
        }
        int width = result.getWidth();
        int height = result.getHeight();
        int[] pixels = new int[width * height];
        for (int y = 0; y < height; y++) {
            int offset = y * width;
            for (int x = 0; x < width; x++) {
                pixels[offset + x] = result.get(x, y) ? BLACK : WHITE;
            }
        }

        Bitmap bitmap = Bitmap.createBitmap(width, height,
                Bitmap.Config.ARGB_8888);
        bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
        return bitmap;
    }

    private static String guessAppropriateEncoding(CharSequence contents) {
        // Very crude at the moment
        for (int i = 0; i < contents.length(); i++) {
            if (contents.charAt(i) > 0xFF) {
                return "UTF-8";
            }
        }
        return null;
    }
}
37
задан double-beep 31 January 2019 в 15:50
поделиться

14 ответов

Существует два других метода сортировки (помимо тех, которых Вы упомянули), я видел который работа вполне прилично.

Нажимают метод To Move

The, используемый для упорядочивания объектов в Галерея веб-работы фотоальбома вполне прилично для упорядочивания фотографий, и это должно работать точно также на любой набор, который может быть представлен как отсортированная группа активируемых по щелчку элементов:

  • Существующий Ваш список объектов как активируемые по щелчку элементы.
  • Нажатие на элемент "выбирает" его, это выделяется, чтобы указать, что это выбрано.
  • Нажатие на другой объект перемещает выбранный пункт в положение незадолго до нажатого объекта.
  • Повторение, пока все объекты не находятся в желаемом порядке.
  • фиктивный объект А показывают в конце списка для движущихся объектов в конец.

Это немного легче использовать, чем drag-n-drop, поскольку требуется меньше функциональных возможностей, и Вы не должны удерживать кнопку мыши, в то время как Вы выясняете, где Вы хотите "отбросить" объект.

метод мог легко быть расширен для разрешения выбора нескольких объектов (через щелчок при нажатой клавише Shift или подобный), который мог затем быть помещен в новое положение таким же образом.

Обеспечивают Номера заказа

Используемый Netflix и некоторыми внутренними приложениями, с которыми я работал. Это работает лучше всего, если у Ваших пользователей есть конкретная идея точно, что числовой порядок должен быть (используется при работе со списками шагов инструкции в нашем внутреннем приложении).

  • Существующий Ваш список объектов один на строку.
  • Обеспечивают поле ввода текста рядом с каждым объектом, где номер заказа отображен, начиная с 1.
  • пользователь изменяет номера заказа в текстовых полях, как желаемый.
  • , Если нескольким объектам дают тот же номер заказа, они размещаются друг рядом с другом.
  • Обеспечивают кнопку для "применения" вида в JavaScript так, чтобы пользователь не отправлял всю страницу для наблюдения перестроенного списка. Это помогает работать в инкрементах.

Редактирование: Несколько дополнительных мыслей о [1 125] Перетаскивание . Вы, возможно, использовали их прежде или нет, но существует несколько вещей, которые могут сделать перетаскивание более прощающим и легче использовать:

  • Выделение область, где объект появится при отбрасывании. Например, покажите видную горизонтальную строку между двумя существующими объектами, где объект будет вставлен, если он будет отброшен.
  • Фантом перемещаемый объект, когда это перетаскивается так, чтобы было очевидно, что перемещается, вместо того, чтобы использовать универсальный курсор "перетаскивания". Это работает лучше всего, если перетаскиваемые объекты являются все еще четкими, если показано друг сверху друга с прозрачностью.
  • Удостоверяются целевые области, где перемещаемое может быть отброшено, достаточно большие. Большие области могут быть полезными для людей, которые испытывают затруднения из-за необходимой координации.
33
ответ дан Adam Bellaire 27 November 2019 в 04:24
поделиться

Вы могли показать наложение при парении над элементом. Это наложение показывает Вам 4 стрелки (n/e/s/w), и можно нажать и переместить элемент соответственно.

, Если Вы пробуете к одерским объектам через сетку как фото функции группировки Facebook и picasaweb, затем это о единственном способе обработать это

, если бы у Вас было 3 столбца, то каждый со списком объектов, нажимая на любой из объектов переместил бы объект любой налево или направо, средний столбец мог показать вариант для левого или правого. Вы могли все еще допускать перетаскивание или сортировку использования типичной функциональности для этого.

0
ответ дан IEnumerator 27 November 2019 в 04:24
поделиться

Можно показать кнопкам 'Up' и 'Delete' просто способ, которым Google делает для SearchWiki. У большинства людей есть по крайней мере некоторый опыт с ним теперь. Большинство людей беспокоится только 'Повышением' их выбора. Если они не любят вещь и хотят к downvote, то это, удаляя из списка со справкой вышеупомянутой кнопки 'Delete' будет легче для них

0
ответ дан Varun Mahajan 27 November 2019 в 04:24
поделиться

Я думал "О перемещении, выбранном к здесь":

  1. Позволяют всем объектам можно выбрать флажками
  2. , Позволяют всем объектам иметь кнопку или значок, означающий "Перемещение, выбранное к здесь"
  3. , Когда "Перемещение, выбранное к здесь", нажато, все выбранные пункты перемещены в этот объект в существующем порядке

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

2
ответ дан Thomas Eyde 27 November 2019 в 04:24
поделиться

Мне, выполняя перетаскивание элементов списка на месте (т.е. в рамках самого списка) лучший подход.

Не только можно дать пользователям непосредственную идею того, на что их список будет похож (список реорганизовывает перед их глазами), но для них также очень легко понять движущийся механизм. И это - самый краткий способ иметь Ваших пользователей, заказывающих список в самом коротком количестве перемещений.

Между прочим, предвидя, что список мог быть длиннее, чем немного элементов, вместе с методом DnD, который Вы могли обеспечить асинхронному способу заказать список: дайте пользователю способность приписать число упорядочивания каждой записи и затем нажать на кнопку "Order". Обрабатывая умным и корректным способом вход пользователя, это могло привести к скорости для более длительного редактирования списков.

2
ответ дан Federico Zancan 27 November 2019 в 04:24
поделиться

Я на самом деле думаю iPhone / iTouch делает это действительно хорошо при перемещении значков приложения.

, Если Вы не видели, что он смотрит здесь: http://www.youtube.com/watch?v=qnXoGnUU6uI

'дрожащие' значки являются очень хорошим визуальным индикатором, что что-то подвижно/перемещаемо.

, Таким образом, я предложил бы этот подход с перетаскиванием отбрасывание. При нажатии и удерживании объект мог поместить его в 'подвижный режим', и это будет обозначено им сотрясение (или некоторые легче кодировать визуальный индикатор). Затем перетаскивание работало бы нормальным способом.

Реализация этого в JavaScript является, конечно, проблемой...

Также другая вещь думать о - большинство людей делает ошибку объединения удобства использования с обучаемостью. Думайте, кто пользователи этого приложения (будут они использовать его регулярно и преподаваться, как использовать его или являются ими пользователи государственной сети, которые могут нечасто использовать его и не преподаваться, как использовать его) - оно могло бы дать Вам другой ответ на то, каково решение должно быть.

3
ответ дан DanSingerman 27 November 2019 в 04:24
поделиться

Вы могли также использовать клавиши со стрелками для перемещения вверх и вниз.

3
ответ дан cjk 27 November 2019 в 04:24
поделиться

Сортировка, путем нажатия на заголовки очень популярна. Возможно, только рассмотренный как переупорядочение представление из фактического списка, все же.

4
ответ дан unwind 27 November 2019 в 04:24
поделиться

1) изменение [1 110] Щелчок для Перемещения включил бы наличие отдельного целевого списка, где пользователь выбирает слот, в который их объект переместит, затем нажимает на исходный объект для перемещения его.

, Например, в следующей схеме, пользователь уже поместил 'E' во главе переупорядоченного списка и выбрал слот три для их следующего выбора. Их следующий шаг должен был бы выбрать, какой объект из старого списка входит в слот три в новом списке. (Строка звездочек является слабой попыткой показать, что слот три выделен или выбран.)

  old       new
 -----     -----
|  A  |   |  E  |
|  D  |   |     |
|  C  |   |*****|
|     |   |     |
|  B  |   |     |
 -----     -----

Нажатие на объект в новый список выбирает его и выделяет его исходный слот в старый список, который является теперь целью. При нажатии на объект второй раз возвращает его тому исходному слоту.

новый список должен также отобразить какие-то индикаторы, чтобы показать, что он имеет выбираемые регионы, возможно, незаметные (низкая непрозрачность) нумерованные кнопки в ее слотах или некоторой другой информативной подразумеваемой возможности.

2) Другой подход должен был бы позволить пользователям проводить линии между исходными и желаемыми положениями.

Независимо от того, что метод выбран, процесс не должен быть болтливым: нет никакой причины, это не могло все быть сделанной стороной клиента (с опцией сохранить и передать изменения в сервере).

5
ответ дан Jeff Sternal 27 November 2019 в 04:24
поделиться

Иначе должен обеспечить маленький ввод текста рядом с каждым объектом, таким образом, пользователь может ввести числовое упорядочивание себя; затем они нажимают кнопку для переупорядочения всего этого сразу. (Я только видел используемый на сайтах, которые хранят порядок пунктов, такой как очередь Netflix или ссылки Живого Журнала.)

5
ответ дан Dan Lew 27 November 2019 в 04:24
поделиться

Можно экспериментировать с перетаскиванием с помощью примеров jQuery UI Sortables. Для создания этого очевидным для нетехнических или новых пользователей, Вы могли использовать визуальные индикаторы, такие как дескрипторы или стрелки и возможно подсказка на парении, чтобы предложить перетащить элемент.

Вы могли даже предоставить анимированному gif демонстрацию жеста.

, Как только пользователь изучает, как сделать это, я думаю, что это - самый легкий метод упорядочивания списка.

6
ответ дан dpan 27 November 2019 в 04:24
поделиться

Некоторые мысли - Очень на идеях, а не реализации заканчиваются хотя...

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

2 - Добавляет "случайную" кнопку, которая генерирует порядок случайным образом - мог быть бесполезным, могла быть забава в зависимости от Вашего приложения

3 - Добавляет "поле" порядка дисплея около каждого объекта и позволяет пользователю управлять им (но удостоверяться, что у Вас есть некоторый код к остальной части автоматического обновления чисел, когда каждый изменяется) лично я думаю, что это могло очень сбивать с толку, но для некоторых пользователей он мог бы работать

4 - Вместо перетаскивания на месте, сделать, чтобы пользователи перетащили к новому списку

5 - Для очень простой версии, имели "любимый" флажок и затем имели список, просто показывают, что у фаворитов сначала, (в алфавитном порядке или что-то)

6 - Есть группы - Вы присваиваете номер группы объекту, все группы кажутся первыми, сопровождаемыми группой 2 и т.д.

Hope, это случайное быстрое движение было полезно, если я думаю о чем-нибудь больше, что я возвращусь...

6
ответ дан Rob Y 27 November 2019 в 04:24
поделиться

Мы нашли, что перетаскивание может быть счетчиком, интуитивным для нетехнических людей. Мы исследовали Стрелку вниз, которая работает, но может также быть громоздкой, поскольку необходимо продолжать нажимать вверх и вниз, и она приводит к большому трафику.

Другая парадигма, которую мы исследовали, является кнопкой Move, таким образом, каждый объект в списке имеет кнопку Move Item при нажатии на него, новые кнопки добавляются прежде и после каждого объекта в списке, чтобы позволить Вам переместить объект в любое местоположение.

Это работает хорошо, когда каждый объект в списке занимает много места, если каждый элемент списка является только одной строкой, это может привести к нарушенному интерфейсу. В нашем случае каждый объект был полдюжиной строк текста или больше. Мы также имеем, добавляет объект здесь кнопку прежде / после каждого объекта для разрешения вставки.

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

13
ответ дан JoshBerke 27 November 2019 в 04:24
поделиться

Реализовать скопировать/вставить функция стиля? Это означало бы, что можно вынуть объект из списка, и затем выбрать другой объект и нажать "вставку" или CTRL+V. Это довольно интуитивно и позволило бы большим спискам управляться легко.

Вы могли реализовать мультивыбор легко для перемещения большого блока смежных объектов.

Сетевой трафик был бы низким (только один или два запроса).

необходимо удостовериться, что "вставка" последовательна. Т.е. вставка всегда вставляет выше выбранного пункта.

Смотрят на Checkvist для большего вдохновения.

4
ответ дан Neil Barnwell 27 November 2019 в 04:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: