37

タブレット用の ICS Gmail アプリ (ListFragment左側にコンテンツ、右側にコンテンツ) に似たレイアウトがあり、2 つのフラグメントの間に影の区切りがあるようにレイアウトを構築するにはどうすればよいか疑問に思っていました (Gmail のように)アプリ、以下に表示)

.その美しい影を見てください!

また、これはこの質問に当てはまるため、アクティブなリスト項目のレイアウトに素敵な三角形/矢印マーカーを配置するにはどうすればよいですか? これを実装すると仮定すると、ListView 自体は影の「レイヤー」のにある必要がありますが、それを作成する方法がわかりません。

4

2 に答える 2

34

みんなに知らせるために (このトピックに関する情報が不足しているように見えるため)、これは個々のリスト行のビューのバックグラウンド セレクター 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 パッチのドローアブルとして定義することで、各リスト項目がその幅に相当する影を中央の線に提供することができ、それがアクティブ化されると、影のそのセグメントが矢印に置き換えられます。確かに私を助けてくれたので、これが誰かに役立つことを願っています!

于 2012-05-20T06:47:55.943 に答える
23

私はあなたがやろうとしているのと同じことをしたいと思っています。あるフラグメントが別のフラグメントよりも「近い」効果を作成します。

Roboguyの回答は、リストアイテムに白い矢印の「セレクター」を配置する方法を処理します。影についてもっと具体的にしようと思います。 バックグラウンドセレクターの使用のもう1つの良い例は、GoogleIO2011アプリのソースコードにあります。ソースを取得したら、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>

次に、それを実際にレイアウトに適用するには、次のようにします。

layout / 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>

これは、(私の知る限り)相対的なレイアウトで行う必要があります。線形レイアウトを使用している場合は、linearLayout全体を相対レイアウト内にラップしてから、グラデーションを追加することができます。

これを行う場合、グラデーション<View><LinearLayout>;を下回る必要があることに注意してください。そうしないと、グラデーションが線形レイアウトの下に描画されるため、グラデーションは表示されません。

于 2012-07-16T17:49:45.237 に答える