Androidフラグメント間のシャドウ区切り文字
-
12-12-2019 - |
質問
私はタブレットのためのICS Gmailアプリと同様のレイアウト(左側のListFragment
)と、私は2つのフラグメントの間に影の区切り文字があるようにレイアウトを構築することにどのように行くことができるか疑問に思いました(下図のGmailアプリのように)
。
また、この質問に適用可能なので、アクティブリストアイテムのレイアウトでは、その素敵な三角形/矢印マーカーをどのように持つことができますか?これを実装すると仮定すると、ListView自体はShadow "Layer"を上回るを嘘をつく必要がありますが、その作成方法はわかりません。
解決
ちょうど誰でも知らせるために(このトピック上に情報が欠けているようです)、これは個々のリスト行のビューのバックグラウンドセレクタXML内で達成されます。たとえば、これはメイン画面のレイアウト、です。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_row"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/list_item_selector">
...<!-- Rest of layout goes here -->
</RelativeLayout>
.
しかしマジックはlist_item_selector
に入っています:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/list_pressed" />
<item android:state_activated="true" android:drawable="@drawable/list_arrow_activated" />
<item android:drawable="@drawable/list_default" />
</selector>
.
このような9パッチの描画を定義することで、各リスト項目を中央のその行に影の幅の価値がある幅に寄与することができます。私はこれが確かに私を助けてくれるように、誰かが助けることを願っています!
他のヒント
あなたがやろうとしているのと同じことをやろうとしています。 1つのフラグメントが別のフラグメントより「近い」の効果を作成します。
RoboGuyの回答は、リスト項目の白い矢印「セレクタ」を持つ方法を処理します。影の中でより具体的になるようにします。 背景セレクタの使用のもう1つの良い例は、Google IO 2011アプリのソースコードで見ることができます。ソースがあると、fragment_dashboard.xmlアイコンセレクタを見てください。
シャドウセパレータは、ビューの左側に適用された勾配です。 2つの部分があります。
最初に、「影」自体:
res / shadow_left.xml
.<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <gradient android:angle="0" android:startColor="#55000000" android:endColor="#00000000" /> </shape>
その後、実際にレイアウトに適用するには:
レイアウト/ my_lower_layer
.<?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" > <View android:layout_width="20dp" android:layout_height="fill_parent" android:background="@drawable/fragment_shadow_left" /> <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> </RelativeLayout>
これは相対レイアウト(私の知る限り)で行われなければなりません。リニアレイアウトを使用している場合は、LinearyLayout全体を相対レイアウトの内側に折り返してから、グラデーションを追加します。
これを行うと、Gradient
<View>
は<LinearLayout>
を下回る必要があります。それ以外の場合、グラデーションはリニアレイアウトの下で描画されますので、表示されません。