ボックスにいくつかの装飾を追加するカスタムbox_background.xml
ドローアブルがあります (例: RelativeLayout):
- 小さな境界線 (2 dp)
- 影 (8 dp)、左と下
押すと、ビューが少し変わります。
- 影が小さい(たとえば、4 dp)
- ボックスの内容が左下にわずかに移動します (つまり、「影に向かって」)。
- (2dp 境界は同じままですが、もちろん、移動したコンテンツを適切にラップする必要があります。)
単独で、box_background_normal
意図したとおりに動作します (box_background_state_pressed
セレクターからコメント アウトされている場合)。理解できないこと:box_background_state_pressed
パディング付きのアイテムが含まれている場合 (以下の XML を参照)、そのパディングは、ボックスが押されていなくてもボックスに影響します。
たぶん<padding>
、この種の「押された状態」機能を実現するために使用することはできません...?
私の具体的な質問:
- パディングが押されていない
box_background_state_pressed
ときにビューに影響を与えるのはなぜですか? - 上記で説明したような「押された状態」の効果をどのように達成できますか?
例 1:がまったく使用されていない場合の押されていない状態box_background_state_pressed
(セレクターからコメント アウト): 境界線、影、およびコンテンツは問題ありません。
例 2:使用中は押されていない状態box_background_state_pressed
。これは壊れています; box_background_state_pressed
ボックスが押されていなくても、大きなパディングはコンテンツに影響します。
Android API レベル 18。テスト デバイス: Nexus 7 (2013)。
box_background.xml
:
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/box_background_state_pressed" />
<item android:drawable="@drawable/box_background_normal" />
</selector>
box_background_normal.xml
:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="8dp" android:right="8dp">
<shape android:shape="rectangle">
<solid android:color="#33000000" />
</shape>
</item>
<item android:bottom="8dp" android:left="8dp">
<shape android:shape="rectangle">
<stroke android:width="2dp" android:color="#FF22BB00" />
<padding
android:left="10dp"
android:bottom="10dp"
android:right="2dp"
android:top="2dp"
/>
</shape>
</item>
</layer-list>
box_background_state_pressed.xml
(おそらく3層未満でこれを行うことができます;私は実験中です):
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="4dp" android:right="4dp">
<shape android:shape="rectangle">
<solid android:color="#33000000" />
</shape>
</item>
<item android:bottom="4dp" android:left="4dp">
<shape android:shape="rectangle">
<stroke android:width="2dp" android:color="#FFFF6677" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#00FFFFFF" />
<padding
android:left="2dp"
android:bottom="2dp"
android:right="10dp"
android:top="10dp"
/>
</shape>
</item>
</layer-list>
(緑とピンクの境界線はデバッグ上の理由によるものです。通常は黒です。)