17

リップル ドローアブルを定義し、それをリストビュー アイテム ビューの背景の背景として設定しました。ほとんど問題なく動作しますが、プレス時に波及効果が表示されないことがあります。

リップル ドローアブル コードは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:attr/colorControlHighlight">
    <item>
        <selector>
            <item android:state_activated="true">
                <shape><solid android:color="?android:attr/colorButtonNormal"/>
                </shape>
            </item>

            <item>
                <shape><solid android:color="@android:color/transparent"/>
                </shape>
            </item>
        </selector>
    </item>
</ripple>

そして、このドローアブルをドロワー アイテムの背景として使用するナビゲーション ドロワーがあります。

<?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="@dimen/navigation_menu_height"
    android:orientation="horizontal"
    android:background="@drawable/listItemBackground">
    ....    
</RelativeLayout>

ただし、アプリを開くたびに、デフォルトで選択されたアイテムを押しても波及効果が表示されません。しかし、別のアイテムを選択してからもう一度選択すると、すべてがうまくいきます。

選択モードが複数であることを除いて、別のほぼ同じListViewにもまったく同じものを使用します。今回は、アイテムが選択されている限り、アイテムを押しても波及効果は表示されません。

選択モードを指定しない別の listView では、最初のアイテムのみが波及効果を示し、他のアイテムは下位の Android バージョンと同じように動作します。

すべてのシナリオでどのように機能させることができるか、私にはまったくわかりません。多分それは本当にListViewの選択モードに関係していますか?

====編集====

これら 3 つの listViews すべてにプロパティ drawSelectorOnTop を追加したところ、最初の 2 つの問題は解消されました。ただし、3 つ目の場合は、次のようになります。

波紋効果は、2 つの波紋を示す最初のアイテムを除いて、すべてのアイテムに有効です! そのうちの 1 つは私の指が押されたところから始まり、もう 1 つは常に真ん中から始まります!

==== もう一度編集==== さて、リストビューの drawSelectorOnTop 属性と一緒に、アクティブ化されたステータスをリップル ノードの外に移動するようにドローアブルを微調整すると、問題は完全になくなりました。

4

2 に答える 2

7

OK、試行錯誤の末、ようやく動作するようになりました。

まず、アクティブ化された状態をリップル ノードの外に移動します。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="true">
        <shape>
            <solid android:color="?android:attr/colorButtonNormal"/>
        </shape>
    </item>
    <item>
        <ripple android:color="?android:attr/colorControlHighlight">
            <item>
                <shape>
                    <solid android:color="@android:color/transparent"/>
                </shape>
            </item>
        </ripple>
    </item>
</selector>

その後、ドローアブルをアイテムの背景として使用する ListView の drawSelectorOnTop を true に設定します。

これで、波及効果が完全に機能します。

于 2014-12-15T04:53:43.343 に答える