8

Q1)描画可能な元のListView状態を見ると、listSelector次のようなものがあります(例を簡略化するためにいくつかのコードを削除しました):

<selector>
    <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/>
    <item android:drawable="<DRAWABLE_1>" android:state_focused="true" android:state_pressed="true"/>
    <item android:drawable="<DRAWABLE_1>" android:state_focused="false" android:state_pressed="true"/>
    <item android:drawable="<DRAWABLE_2>" android:state_focused="true"/>
</selector>

しかし、私は自分のアプリで次のようにしています。

<selector>
    <item android:drawable="<DRAWABLE_2>" android:state_pressed="false" android:state_focused="true"/>
    <item android:drawable="<DRAWABLE_1>" android:state_pressed="true"/>
    <item android:drawable="<TRANSPARENT>" />
</selector>

これは同じ結果をもたらすようで、はるかに簡単です。最初のものが私自身のバージョンよりもうまくいく状況に気づきましたか?コードをできるだけ短くするために、何か重要なことを見逃していないことを確認したいだけです...

Q2)州のドローアブルが<item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/>一番上にあるのですが、なぜ必要なのかわかりません。いつも少し戸惑いましたstate_window_focused…本当に必要ですか?

4

1 に答える 1

2

よくわからないのですが、これを答えに入れなければなりませんでしたが、それは私が思うことです。

Q2から始めましょう:

state_window_focusedデフォルトの動作(「ウィンドウ」は表示されますが、フォーカスがありません)に対応し、デフォルト()を示すためだけに使用されていると思いますTRANSPARENT

Q1について:

DRAWABLE2両方の場合と同じ条件下で視覚化されます-焦点が合っていて押されていない理由は次のとおりです。

最初のケース:

<item android:drawable="<DRAWABLE_2>" android:state_focused="true"/>

2番目のケース:

`<item android:drawable="<DRAWABLE_2>" android:state_focused="true" android:state_pressed="false"/>`

焦点を合わせている間はD2がありますが、あなたの場合は押されていないときもあります。

DRAWABLE1いずれの場合も押されている間のみ表示されます。違いは、最初のケースでは、2つの追加の状態も指定されているandroid:state_focused="true/false"ため、意味がないため、ケース1の2つの行を1つ(正確に1つ)に縮小できます。

<item android:drawable="<DRAWABLE_1>"  android:state_pressed="true"/>

だから、物事を要約すると:

ケース1-あなたが持っている:

<selector>
    <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/>
    <item android:drawable="<DRAWABLE_1>" android:state_focused="true" android:state_pressed="true"/>
    <item android:drawable="<DRAWABLE_1>" android:state_focused="false" android:state_pressed="true"/>
    <item android:drawable="<DRAWABLE_2>" android:state_focused="true"/>
</selector>

これは次のものと同等です:

<selector>
    <item android:drawable="<TRANSPARENT>" android:state_window_focused="false"/>
    <item android:drawable="<DRAWABLE_1>"  android:state_pressed="true"/>
    <item android:drawable="<DRAWABLE_2>"  android:state_focused="true"/>
</selector>

そしてあなたのケース(ケース2)、比較のために:

<selector>
    <item android:drawable="<DRAWABLE_2>" android:state_pressed="false" android:state_focused="true"/>
    <item android:drawable="<DRAWABLE_1>" android:state_pressed="true"/>
    <item android:drawable="<TRANSPARENT>" />
</selector>

私がこれまでに見た唯一の違いは、最初のケースでは、DRAWABLE2フォーカスされている場合にのみ表示されることです(押されているかどうかに関係なく)が、あなたの場合は、押されていない必要があり、それが異なる唯一の条件です。

于 2013-07-30T07:52:08.730 に答える