3

私の質問- カスタム ListView にある TextView のテキストを、ListView でアイテムが選択されている場合にのみマーキー スクロールするようにします。リスト項目がフォーカスを失ったら、マーキーのスクロールを停止します。スクロールを機能させるには TextView を有効 ( setEnabled(true) ) に設定する必要があることはわかっていますが、アイテムが追加されたときにこれを行うと、それらはすべてスクロールします。起こります)。ListView のクリックハンドラーを使用してプログラムで設定して、TextView を有効に設定しようとしました ( setEnabled(true))、プライベート変数で現在選択されているアイテムを追跡し、逆に、新しいアイテムがクリックされたときに、以前のビューの TextView 有効化ステータスを false に設定します。これが理にかなっていることを願っています。これをよりよく説明する Java コードを次に示します。

    private View tempListItemView = null;

    if (this.tempListItemView != null) {
       TextView tempTxtView = (TextView) tempListItemView.findViewById(R.id.txtArticleTitle);
       tempTxtView.setSelected(false);
       tempTxtView.setEllipsize(TruncateAt.END);
    }
    // Set marquee of currently selected list item
    TextView tt = (TextView) v.findViewById(R.id.txtArticleTitle);
    tt.setEllipsize(TruncateAt.MARQUEE);
    tt.setSelected(true);
    tempListItemView = v; 

これはうまくいきます。しかし、それは少し不格好です。たとえば、前のアイテムがディスプレイから離れた場合、オフになることはなく、リスト アイテムを選択すると、設定したカスタム listSelector プロパティがすべて失われます (以下を参照)。また、スクロールする TextView の背景項目が黒に変わるという奇妙な動作がいくつかありました (さらに、ListView の listSelector 全体が完全に消えます。Droid でキーパッドを使用しても、これは発生しません。正常に動作します。ただし、リスト項目が押されたときにこの機能をエミュレートしようとしているだけです.これを実現する方法については、ウェブ上であまり見つけていません.以下はスニペットとスクリーンショットです.

カスタム リスト ビューで ArrayAdapter にバインドした ListActivity があります。このアクティビティが関連付けられているコンテンツ ビューは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
    android:id="@+id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:listSelector="@drawable/list_selector"
    />
</LinearLayout>

list_selector ドローアブルは次のようになります。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_focused="true" android:drawable ="@drawable/maroon_list_select_bg" />
  <item android:drawable="@drawable/maroon_list_select_bg" />
</selector>

その Drawable は、リスト項目選択の栗色の背景色をペイントするための単純な 1x1 栗色のピクセルです。スペースを節約するために、カスタム ビューがどのように見えるかのスクリーンショットを添付しました。

ここでは、各リスト項目を定義するカスタム レイアウトの簡単なスニペットを示します (マーキー TextView を使用)...

            <TextView
                android:id="@+id/txtArticleTitle"
                android:textSize="16sp"
                android:textStyle="bold"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/list_item"
                android:singleLine="true"
                android:ellipsize="end">  
            </TextView>
            <TextView
                android:id="@+id/txtArticleSnippet"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/list_desc_copy"
                >
            </TextView>
            <TextView
                android:id="@+id/txtArticleVotes"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Votes: 1576"
                android:textColor="@color/list_small_copy"
                >
            </TextView>

覚えておいてください、スクロールを取得するには android:ellipsize を「マーキー」に設定する必要があることを知っていますが、上記で説明したように、現在選択されているリストのタイムに対してプログラムでこれを行っていました。

誰かがこれに対する解決策を持っていますか? 事前に感謝し、長い投稿をお詫びします...徹底的にしようとしています. 再度、感謝します!

4

2 に答える 2

0

その setSelected(true) をどこに置いたかわかりません。

私の場合、GridView を使用しています (ListView にも適用する必要があります)。setOnItemClickListener でこれを行うだけです。

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

            v.setSelected(true);

            // FIXME - text not align in the background
            Toast.makeText(getSherlockActivity()
                    , "click " + SHOWN_TRACKED_ITEMS.get(position).name, Toast.LENGTH_SHORT).show();
        }
    });

2 番目のアイテムがクリックされている間に、マーキーを実行している最初のアイテムが停止し、2 番目のアイテムがマーキーを開始したようです。以前に選択した他のアイテムを自動的に選択解除するようです。

こちらのgifファイルでライブで見ることができます。

于 2013-12-12T06:13:57.890 に答える
0

カスタム TextView ::New クラスを使用して TextView:: を拡張しようとしましたか? そして、onTouchEvent(MotionEvent event)ドロイドのキーパッドでうまく機能すると言っています。だからおそらく電話する代わりに

super.onTouchEvent(MotionEvent event);

正しいキーで呼び出す

onKeyDown(int keyCode, KeyEvent event)

またはこれで十分です

onTrackballEvent(MotionEvent event)

XMLを変更することを忘れないでください

于 2012-06-02T17:01:25.697 に答える