ПРИМЕЧАНИЕ. Хорошо, я признаю, что название немного расплывчато, но английский язык не является моим основным языком, и я не уверен, как описать проблему в одном отклике.
Фон
Я пытаюсь создать приложение, отображающее всю информацию о приложениях в gridView.
У gridView есть numColumns, установленный на auto_fit, так что его количество столбцов будет прекрасно настроено для всех типов экранов.
Проблема
Поскольку информация о каждом приложении иногда может быть длинной, высота ячейки может отличаться от той, которая находится рядом с ней.
Я хочу, чтобы ячейки сетки имели одинаковую ширину (что отлично работает во всех случаях), а для каждой строки высота должна определяться максимальной высотой ячеек строки.
Это вызывает странные вещи:
- Редко: некоторые ячейки становятся пустыми. иногда, когда прокручивается и возвращается туда, ячейки заполняются...
- Весьма распространено: некоторые ячейки используют другие ячейки.
- Довольно часто: некоторые ячейки не занимают места, которое они могут принимать, оставляя пустое пространство, на которое нельзя щелкнуть.
- Очень редко: при воспроизведении с прокруткой, если вы прокрутите весь путь до вершины, вы получите всю сетку пустым и не прокручиваемым...
Вот скриншот, показывающий проблемы С# 2 и # 3 (они обычно не отображаются вместе):
Код, который я использовал
Это xml ячейки сетки:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/list_divider_holo_dark" >
<ImageView
android:id="@+id/appIconImageView"
android:layout_width="48dip"
android:layout_height="48dip"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:adjustViewBounds="true"
android:contentDescription="@string/app_icon"
android:src="@drawable/ic_menu_help" />
<TextView
android:id="@+id/appLabelTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toLeftOf="@+id/isSystemAppImageView"
android:layout_toRightOf="@+id/appIconImageView"
android:ellipsize="marquee"
android:text="label"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textStyle="bold"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/appDescriptionTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/appLabelTextView"
android:layout_below="@+id/appLabelTextView"
android:layout_toLeftOf="@+id/isSystemAppImageView"
android:ellipsize="marquee"
android:text="description"
tools:ignore="HardcodedText" />
<ImageView
android:id="@+id/isSystemAppImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/appDescriptionTextView"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:adjustViewBounds="true"
android:contentDescription="@string/content_description_this_is_a_system_app"
android:src="@drawable/stat_sys_warning" />
</RelativeLayout>
Что я пробовал
Я попробовал несколько возможных решений:
-
используя HorizontalListView, похоже, это разрешает, но затем он не позволяет щелкнуть/долго нажимать на элементы.
-
Я нашел красивую библиотеку для создания текстовых эффектов с эффектом "marquee" ( здесь), но его лицензия не настолько разрешительна.
-
Настройка высоты ячейки как фиксированной или установка текстовых просмотров с фиксированным количеством строк также работает, но затем она сокращает (часть) содержимое текстовых элементов без возможности их отображения.
-
Я также пытался использовать linearLayouts вместо RelativeLayout, но это не помогло.
-
Возможное решение - получить максимальную высоту, используемую всеми представлениями gridView (используя getView для всех элементов), подобно этот код, но предполагается, что вы знаете количество столбцов и хотите, чтобы все ячейки имели одинаковую высоту.
Вопрос
Как мне это сделать?
Должен ли я использовать что-то вроде StaggeredGrid?
Есть ли способ поместить текстовые элементы в фиксированный размер, но позволить им показывать их содержимое с помощью прокрутки (вручную или автоматически)?