如何建立一个按字母顺序排列的滚动条在android的显示所有的信? [英] How to create an alphabetical scrollbar displaying all the letter in android?

查看:216
本文介绍了如何建立一个按字母顺序排列的滚动条在android的显示所有的信?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的目的是为了获得类似的东西:

但唯一的例子我能看到的是这样的名单:
<一href="http://stackoverflow.com/questions/5129250/android-listview-fastscroll-with-alphabet-like-on-iphone-contacts-activity">android - 列表视图fastscroll与字母像iPhone联系人活动

很明显,我不希望就像当你fastscroll其中显示的字母的联系人列表。我知道如何做到这一点。

任何指针将受到欢迎。 (我试过<一个href="http://stackoverflow.com/questions/7129069/how-to-show-alphabetical-letters-on-side-of-android-listview">this但没有成功)

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

定义列表视图如常。定义包含的ListView一个RelativeLayout的键,在右边,一个的LinearLayout 所有的信件。为更好的解决方案,可以动态地生成的字母列表仅显示在列表中的字母。然后在onclick方法,添加的行为滚动列表:

XML

 &LT; XML版本=1.0编码=UTF-8&GT?;
&LT; RelativeLayout的的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =FILL_PARENT机器人:layout_height =FILL_PARENT&GT;

    &LT; ListView的机器人:ID =@机器人:ID /列表机器人:layout_width =match_parent机器人:layout_height =match_parent机器人:layout_marginRight =28DIP/&GT;

    &LT;的LinearLayout机器人:方向=垂直
        机器人:layout_width =28DIP机器人:layout_height =WRAP_CONTENT
        机器人:layout_alignParentRight =真正的机器人:背景=@机器人:彩色/透明&GT;

        &LT; TextView的机器人:ID =@ + ID / A的android:文本=A机器人:标签=A
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / B的android:文本=B机器人:标签=B
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / C机器人:文本=C机器人:标签=C
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / D机器人:文本=D机器人:标签=D
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / E的android:文本=E机器人:标签=E
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / F机器人:文本=F机器人:标签=F
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / G机器人:文本=G机器人:标签=G
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / H的android:文本=H机器人:标签=H
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / I机器人:文=我的Andr​​oid版本:标签=我
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / J机器人:文本=J机器人:标签=J
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / K机器人:文本=K机器人:标签=K
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / L的android:文本=L机器人:标签=L
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / M的android:文本=M机器人:标签=M
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / N机器人:文本=N机器人:标签=N
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / O的android:文本=O机器人:标签=O
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / P的android:文本=P机器人:标签=P
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / Q机器人:文本=Q机器人:标签=Q
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / R的android:文本=R的Andr​​oid版本:标签=R
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / S机器人:文本=S机器人:标签=S
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / T的android:文本=T型机器人:标签=T
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / U机器人:文本=U型机器人:标签=U
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / V的android:文本=V机器人:标签=V
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / W的android:文本=W机器人:标签=W
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / X的android:文本=X机器人:标签=X
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / Y的android:文本=Y机器人:标签=Y
            风格=@风格/ alphabetTextView/&GT;
        &LT; TextView的机器人:ID =@ + ID / Z机器人:文本=Z机器人:标签=Z
            风格=@风格/ alphabetTextView/&GT;

    &LT; / LinearLayout中&GT;
&LT; / RelativeLayout的&GT;
 

的Java

  @覆盖
公共无效的onClick(视图v){
    字符串firstLetter =(字符串)v.getTag();
    INT索引= 0;
    如果(StringList的!= NULL){
        对于(字符串字符串:StringList的){
            如果(string.startsWith(firstLetter)){
                指数= stringList.indexOf(串);
                打破;
            }
        }
    }
    lv.setSelectionFromTop(指数,0);
}
 

解决方案

这是一个iPhone的功能,Android使用快速滚动。我建议你​​使用这个平台的替代,而不是试图强制执行共同的功能。

如果你一定要,你必须自己实现。把你的列表视图在一个RelativeLayout的,把AZ TextViews在设置为 layout_alignParentRight =真正的垂直的LinearLayout。 TextView的的标签设置为AZ appropiately并设置的onClick =quickScroll上所有的人。

实现你的活动:

 公共无效quickScroll(视图v){
    串字母=(字符串)v.getTag();
    //找到隔板行视图的索引
    list.setSelectionFromTop(指数,0);
}
 

这将滚动到所选字母的onClick,但我相信你可以滚动你的手指在iPhone上的字母,它会更新列表?你必须实现一个onTouchListener,而不是onClickListener为。

My purpose is to obtain something like that :

But the only examples i can find are lists like that :
android - listview fastscroll with alphabet like on iPhone contacts activity

Obviously, I don't want a list like the contacts which displays the letters when you fastscroll. I know how to do this.

Any pointer would be welcome. (I tried this but no success)

Below, the full solution as suggest by FunkTheMonk (thanks a lot) :

Define the listview as usual. Define a RelativeLayout containing the ListView and on the right, a LinearLayout with all the letters. For a better solution, the list of letters could be generated dynamically to only display the letters in the list. Then in the onClick method, add the behaviour to scroll the list :

xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="fill_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);
}

解决方案

This is an iPhone feature, Android uses fast scroll. I'd recommend that you use the platform alternative rather than try to enforce common functionality.

If you must, you'll have to implement this yourself. Put your list view in a RelativeLayout and put A-Z TextViews in a vertical LinearLayout that is set to layout_alignParentRight="true". Set the TextView's tag to A-Z appropiately and set onClick="quickScroll" on all of them.

Implement in your Activity:

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

This will scroll to the selected letter onClick, but I believe you can scroll your finger over the alphabet on iPhone and it'll update the list? You'll have to implement an onTouchListener rather than onClickListener for that.

这篇关于如何建立一个按字母顺序排列的滚动条在android的显示所有的信?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆