Android против iOS: создайте макет, подобный настройкам, для экранов без настроек на Android - PullRequest
0 голосов
/ 08 октября 2018

Я пришел из разработки для iOS, где у нас есть UITableViewCell, что отлично подходит для составления вертикальных списков контента.Ячейка содержит основной и дополнительный ярлык, а также значок.

Я искал что-то похожее на Android, и кажется, что Настройки дают мне именно то, что я хочу.Когда я создаю страницу настроек в Android, очень легко создать красивый макет из XML.Используя следующий простой XML-код, я могу получить вертикальный список элементов (например, UITableView в iOS), который имеет красивый значок с левой стороны, элемент пользовательского интерфейса с правой стороны (переключатель), правильный размер ивыровненный заголовок и приятная анимация, когда я касаюсь предпочтения.

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <SwitchPreference
        android:key="setting_toggle"
        android:title="@string/setting_toggle"
        android:icon="@drawable/setting_toggle"
        android:defaultValue="true" />
    <SwitchPreference
        android:key="setting_toggle2"
        android:title="@string/setting_toggle2"
        android:icon="@drawable/setting_toggle2"
        android:defaultValue="true" />
</PreferenceScreen>

Однако, если я хочу использовать подобный макет за пределами настроек (в моем случае, для экрана меню, который ссылается на другие страницы)Кажется, гораздо сложнее получить такой простой макет.Я попытался сделать это с помощью TableLayout:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="1">
    <TableRow
        android:id="@+id/button_1"
        android:background="?android:attr/selectableItemBackground"
        android:clickable="true"
        android:focusable="true">
        <TextView
            android:text="@string/tablerow_1"
            android:textSize="15sp"
            android:textStyle="bold"
            android:gravity="center_vertical"
            android:paddingStart="12dp"
            android:paddingEnd="0dp"
            android:layout_height="70dp"
            android:padding="3dip" />
    </TableRow>
</TableLayout>

Это обеспечивает анимацию при нажатии и центрирует текст по вертикали.Но моя цель состоит в том, чтобы имитировать внешний вид страницы настроек, поэтому предстоит пройти долгий путь:

  1. Шрифт по умолчанию для текстового представления отличается от шрифта по умолчанию для предпочтения.
  2. Размер строки по умолчанию отличается.
  3. В текстовом представлении нет ни свойства значка, ни элемента строки таблицы.
  4. Нет простого способа поместить другой элементправая сторона (например, переключатель или вторичное текстовое представление)

Мне трудно поверить, что Android создаст простой в использовании API-интерфейс, такой как Preferences, а затем сделает его доступным только для одного измного ситуаций, где это было бы полезно.Итак, что мне не хватает?Существует ли более широко используемый API, подобный настройкам, о котором я просто не знаю, или я должен просто использовать API настроек для экранов, не связанных с настройками, таких как меню?

1 Ответ

0 голосов
/ 08 октября 2018

Вы должны использовать ListView или RecyclerView с пользовательскими представлениями в нем.

  1. Вы должны объявить ListView в макете вашей деятельности / фрагмента.
  2. У вас естьдля создания XML-макета, в котором вы определяете свою строку.
  3. Вам необходимо создать адаптер для вставки данных в ListView.

. Более подробно вы можете посмотреть здесь: http://developer.android.com/resources/tutorials/views/hello-listview.html

...