Android TV Leanback RowsFragment держать начальный пункт в начале - PullRequest
0 голосов
/ 28 ноября 2018

Я работаю над приложением Leanback, и я реализовал строки и все через RowsFragment, и все это прекрасно работает.

На данный момент, когда я иду влево и вправо по элементам в строке, сфокусированный элемент перемещается в середину экрана и получает фокус.

Пример -

enter image description here

Я хочу, чтобы сфокусированный элемент оставался в начале строки, а не в середине.

Пример-

enter image description here

Не удалось найти что-либо об этом в Интернете.Буду очень признателен за любую информацию, касающуюся этого.

Ответы [ 4 ]

0 голосов
/ 26 апреля 2019

Если вы также хотите, чтобы последний элемент строки отображался в начале, используйте этот ListRowPresenter:

class FocusedItemAtStartListRowPresenter(focusZoomFactor: Int) : ListRowPresenter(focusZoomFactor) {
    override fun createRowViewHolder(parent: ViewGroup): RowPresenter.ViewHolder {
        val viewHolder = super.createRowViewHolder(parent)

        with((viewHolder.view as ListRowView).gridView) {
            windowAlignment = BaseGridView.WINDOW_ALIGN_LOW_EDGE
            windowAlignmentOffsetPercent = 0f
            windowAlignmentOffset = parent.resources.getDimensionPixelSize(R.dimen.lb_browse_padding_start)
            itemAlignmentOffsetPercent = 0f
        }

        return viewHolder
    }
}

Это похоже на то, что делает Leanback Launcher.

0 голосов
/ 20 декабря 2018

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

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

Еще раз это обходной путь, но он работает точно так, как ожидалось.

0 голосов
/ 03 апреля 2019

Столкнулся с той же проблемой и решил ее с помощью пользовательского ListRowPresenter:

override fun createRowViewHolder(parent: ViewGroup): RowPresenter.ViewHolder {
        val viewHolder = super.createRowViewHolder(parent)

        val itemWidth = parent.resources.getDimensionPixelSize(R.dimen.epg_program_width)

        with((viewHolder as ListRowPresenter.ViewHolder).gridView) {
            itemAlignmentOffset = parent.width / 2 - itemWidth / 2 - paddingLeft
        }

        return viewHolder
    }
0 голосов
/ 02 декабря 2018

Возможно, вы захотите попробовать этот метод:

void setSelectedPositionSmooth (int position)

Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...