web-dev-qa-db-ja.com

アンドロイドのすべての文字を表示するアルファベット順のスクロールバーを作成する方法は?

私の目的は、そのようなものを取得することです:
http://appsreviews.com/wp-content/uploads/2010/08/Cures-A-Z-App-for-iPhone.jpg

しかし、私が見つけることができる唯一の例は、そのようなリストです:
Android-iPhoneの連絡先アクティビティのように、アルファベットを使用したリストビューfastscroll

明らかに、高速スクロールしたときに文字を表示する連絡先のようなリストは必要ありません。私はこれを行う方法を知っています。

任意のポインタを歓迎します。 (私は this を試みましたが、成功しませんでした)

以下、FunkTheMonkが提案する完全なソリューション(たくさんありがとう):

通常どおりリストビューを定義します。 ListViewを含むRelativeLayoutを定義し、右側にすべての文字を含む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);
}
47
Sephy

これはiPhoneの機能です。Androidは高速スクロールを使用します。一般的な機能を強制するのではなく、プラットフォームの代替を使用することをお勧めします。

必要な場合は、これを自分で実装する必要があります。リストビューをRelativeLayoutに配置し、A-Z TextViewsをlayout_alignParentRight="true"に設定された垂直LinearLayoutに配置します。 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のアルファベットの上で指をスクロールするとリストが更新されると思いますか?そのためには、onClickListenerではなくonTouchListenerを実装する必要があります。

43
FunkTheMonk

IndexScroller を使用してみてください。これはタッチ時にのみ表示され、接触がない場合は自動的に非表示になります。これがスクリーンショットです

screenshot

26
Nam Trung