【问题标题】:Android vs iOS: create Preferences-like layout for non-preferences screens on AndroidAndroid vs iOS:在 Android 上为非首选项屏幕创建类似首选项的布局
【发布时间】:2018-10-08 14:55:58
【问题描述】:

我来自 iOS 开发部门,我们有 UITableViewCell,它非常适合制作垂直的内容列表。一个单元格包含一个主要和次要标签以及一个图标。

我一直在 Android 上寻找类似的东西,而且 Preferences 似乎给了我我想要的东西。当我在 Android 中创建首选项页面时,从 XML 创建一个漂亮的布局真的很容易。使用以下简单的 XML 代码,我可以获得一个垂直的项目列表(如 iOS 中的 UITableView),左侧有一个漂亮的图标,右侧有一个用户界面元素(开关),一个适当大小的和对齐的标题,以及当我点击首选项时的漂亮动画。

<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>

但是,如果我想在 Preferences 之外使用类似的布局(在我的例子中,对于链接到其他页面的菜单屏幕),获得这样一个简单的布局似乎要困难得多。我试图用 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 会创建一个像 Preferences 这样易于使用的 API,然后只在许多有用的情况下使用它。那么,我错过了什么?是否有我不知道的更广泛使用的类似首选项的 API,或者我应该只将 Preferences API 用于菜单等非首选项屏幕?

【问题讨论】:

  • 您缺少 ListView 和 RecyclerView。 TableLayout 是一个罕见的用例——它应该只用于相对较小的列数据表。以上两个更相当于iOS的UiTableView。

标签: android android-layout android-preferences


【解决方案1】:

您应该使用 ListViewRecyclerView 并在其中包含自定义视图。

  1. 您必须在活动/片段布局中声明 ListView
  2. 您必须在定义行的位置创建 xml 布局。
  3. 您必须创建一个适配器才能将数据插入到您的ListView

更多你可以看这里:http://developer.android.com/resources/tutorials/views/hello-listview.html

【讨论】:

    猜你喜欢
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    相关资源
    最近更新 更多