如何创建一个字母滚动条显示android中的所有字母?

2024-03-09

My purpose is to obtain something like that :
http://appsreviews.com/wp-content/uploads/2010/08/Cures-A-Z-App-for-iPhone.jpg

但我能找到的唯一例子是这样的列表:
android - 列表视图快速滚动与字母表就像 iPhone 联系人活动 https://stackoverflow.com/questions/5129250/android-listview-fastscroll-with-alphabet-like-on-iphone-contacts-activity

显然,我不想要像联系人这样在快速滚动时显示字母的列表。我知道该怎么做。

欢迎任何指点。 (我试过this https://stackoverflow.com/questions/7129069/how-to-show-alphabetical-letters-on-side-of-android-listview但没有成功)

下面是 FunkTheMonk 建议的完整解决方案(非常感谢):

像往常一样定义列表视图。定义一个RelativeLayout,其中包含ListView在右边,一个LinearLayout与所有的字母。为了更好的解决方案,可以动态生成字母列表以仅显示列表中的字母。然后在 onClick 方法中,添加滚动列表的行为:

xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <ListView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginRight="28dip" />

    <LinearLayout android:orientation="vertical"
        android:layout_width="28dip" android:layout_height="wrap_content"
        android:layout_alignParentRight="true" android:background="@android:color/transparent" >

        <TextView android:id="@+id/A" android:text="A" android:tag="A"
            style="@style/alphabetTextView"/>
        <TextView android:id="@+id/B" android:text="B" android:tag="B"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/C" android:text="C" android:tag="C"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/D" android:text="D" android:tag="D"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/E" android:text="E" android:tag="E"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/F" android:text="F" android:tag="F"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/G" android:text="G" android:tag="G"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/H" android:text="H" android:tag="H"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/I" android:text="I" android:tag="I"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/J" android:text="J" android:tag="J"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/K" android:text="K" android:tag="K"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/L" android:text="L" android:tag="L"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/M" android:text="M" android:tag="M"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/N" android:text="N" android:tag="N"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/O" android:text="O" android:tag="O"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/P" android:text="P" android:tag="P"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/Q" android:text="Q" android:tag="Q"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/R" android:text="R" android:tag="R"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/S" android:text="S" android:tag="S"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/T" android:text="T" android:tag="T"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/U" android:text="U" android:tag="U"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/V" android:text="V" android:tag="V"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/W" android:text="W" android:tag="W"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/X" android:text="X" android:tag="X"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/Y" android:text="Y" android:tag="Y"
            style="@style/alphabetTextView" />
        <TextView android:id="@+id/Z" android:text="Z" android:tag="Z"
            style="@style/alphabetTextView" />

    </LinearLayout>
</RelativeLayout>

Java

@Override
public void onClick(View v) {
    String firstLetter = (String) v.getTag();
    int index = 0;
    if (stringList != null) {
        for (String string : stringList) {
            if (string.startsWith(firstLetter)) {
                index = stringList.indexOf(string);
                break;
            }
        }
    }
    lv.setSelectionFromTop(index, 0);
}

这是iPhone的功能,Android使用快速滚动。我建议您使用平台替代方案,而不是尝试强制执行通用功能。

如果必须的话,您必须自己实现。将列表视图放入相对布局中,并将 A-Z TextView 放入垂直 LinearLayout 中,该布局设置为layout_alignParentRight="true"。将 TextView 标签适当设置为 A-Z 并设置onClick="quickScroll"在他们所有人身上。

在您的活动中实施:

public void quickScroll(View v) {
    String alphabet = (String)v.getTag();
    //find the index of the separator row view
    list.setSelectionFromTop(index, 0);
}

这将滚动到单击时选定的字母,但我相信您可以将手指滚动到 iPhone 上的字母表上,它会更新列表?为此,您必须实现 onTouchListener 而不是 onClickListener。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何创建一个字母滚动条显示android中的所有字母? 的相关文章

随机推荐

  • Google Document AI API OCR 响应中的空页面数组

    我目前正在使用 Google Document AI API 通过 OCR 从 PDF 中提取文本 但是 我注意到 OCR 响应中的页面数组始终为空 即使 OCR 操作成功完成并且我能够从文档中检索文本 这是我正在使用的代码的简化版本 fr
  • Mercurial 樱桃采摘更改提交

    比如说 我对代码做了很多更改 并且只需要提交其中的一些更改 Mercurial 有没有办法做到这一点 我知道darcs有这样一个功能 I know hg transplant可以在分支之间执行此操作 但我需要类似的东西来在当前分支中提交代码
  • jQuery Ajax 调用 - 成功时设置变量值[重复]

    这个问题在这里已经有答案了 我正在编写一个应用程序 用于修改服务器中缓存对象的数据 这些修改是通过 ajax 调用执行的 该调用基本上更新该对象的属性 当用户完成工作时 我有一个基本的 保存更改 按钮 允许他们保存数据并刷新缓存的对象 为了
  • Indy HTTP:读取 403 响应内容

    我在使用 Indy HTTP 在 Delphi 中 和 Google Contacts API 时遇到问题 请参阅下页 客户端登录响应 部分 http code google com apis accounts docs AuthForIn
  • 尝试运行 Selenium Webdriver (WebdriverJS) 的示例测试时出现错误

    我正在尝试在文件中运行示例测试google search test js位于 node modules selenium webdriver example 我正在使用 WebdriverJS 并且只安装了selenium webdrive
  • 使用 java 解析器删除 XML 节点

    在下面的示例 XML 中 如果 E 13 如何使用 java 解析器删除整个 B 节点
  • 在 NSLayoutManager 中使用boundingRectForGlyphRange计算字边界时如何消除前导空格

    我正在 iOS 上将多行字符串分解为单词边界 我的解决方案以 NSLayoutManager 的boundingRectForGlyphRange 方法为中心 它几乎可以工作 只是每个单词的矩形向右偏移了几个像素 换句话说 NSLayout
  • 单用户的 Git 工作流程

    我是一家开发少量桌面应用程序和网站的单身商店 几个月前我开始使用 GIT 进行版本控制 我对它相当满意 但我的使用非常笨拙 我想知道单个用户的工作流程应该是什么 现在 我的每个项目文件夹中都有一个 git 文件夹 我每隔一段时间就提交一次更
  • React 中没有构造函数的初始化状态

    import React Component from react class Counter extends Component state value 0 increment gt this setState prevState gt
  • 将网页抓取的结果存储到数据库中

    我已经使用 python 编写了一段用于网页抓取的代码 该代码使用 selenium 从亚马逊提取 Macbook 的数据 现在我想将这些值存储在 Excel 或 MySql 中 特定产品行中有各种 html css 类和一个包含产品所有参
  • 用户'User'@'%'和'User'@'localhost'不一样吗?

    我根据第一个命令创建了一个用户 但无法通过本地主机 linux 登录 这个链接mysqldoc http forums mysql com read php 101 304823 305463 msg 305463指示我需要创建第二个同名用
  • Ubuntu 10 Ruby 1.9 Rails 3:没有这样的文件或目录

    我已经为此苦苦挣扎有一段时间了 我在装有 ruby 的开发机器上运行 Ubuntu 101 8在它上面 我removed I 安装了红宝石1 9 3和rails3使用RVM和这个教程http ryanbigg com 2010 12 ubu
  • Eclipse Luna 快速搜索命令

    The Quick Search Command seems to have disappeared in Luna In Keplar this was bound by default to Ctrl Shift L In Luna C
  • 如何增加在 Windows 7 下运行的 Apache 的堆栈大小?

    我认为在 Windows 7 下的 Apache 服务器上运行 cakePHP 应用程序时出现堆栈溢出 此问题在 Windows 平台上更常见 因为 Apache 的默认堆栈大小较小 Windows 上的默认堆栈大小为 1 MB 而 Uni
  • 检查标记是否在圆半径内

    我想知道给定的标记是否在圆半径内 在 javascript 中 我可以做类似的事情 google maps geometry spherical computeDistanceBetween latLngCircleCenter latLn
  • Mercurial 克隆问题

    我正在使用 Mercurial 并且在本地克隆了一个存储库hg push 我得到这个 abort cannot lock static http repository 这是什么意思 为什么它不能锁定 static http 存储库 文件夹权
  • 从 pandas 数据框的列或行获取列表?

    我有一个数据框df从 Excel 文档导入 如下所示 cluster load date budget actual fixed price A 1 1 2014 1000 4000 Y A 2 1 2014 12000 10000 Y A
  • 为什么编译器这么蠢?

    我总是想知道为什么编译器无法弄清楚人眼显而易见的简单事物 他们做了很多简单的优化 但从来没有做过哪怕一点点复杂的优化 例如 此代码在我的计算机上大约需要 6 秒才能打印值零 使用 java 1 6 int x 0 for int i 0 i
  • mysql中如何将varbinary转换为char/varchar

    我有一个 varbinary 字段 它已经被填充了 现在我如何将 varbinary 转换为 varchar 以便我可以将字段中的数据用于其他目的 我使用MySQL版本5 10 迟到的答复 您可以使用 CAST 或 CONVERT 因此 C
  • 如何创建一个字母滚动条显示android中的所有字母?

    My purpose is to obtain something like that 但我能找到的唯一例子是这样的列表 android 列表视图快速滚动与字母表就像 iPhone 联系人活动 https stackoverflow com