Подтвердить что ты не робот

Теневой разделитель между Android-фрагментами

У меня есть макет, похожий на приложение ICS Gmail для планшетов (ListFragment слева и содержимое справа), и мне было интересно, как я могу построить конструкцию, чтобы между двумя разделителями был теневой разделитель фрагменты (например, в приложении Gmail, как показано ниже)

. Just look at that beautiful shadow!

Кроме того, поскольку это применимо к этому вопросу, как я могу использовать этот красивый треугольник/указатель стрелки в макете активного списка? Я предполагаю, что для реализации этого, ListView сам должен лежать выше теневой слой, но я понятия не имею, как его создать.

4b9b3361

Ответ 1

Просто чтобы все знали (потому что в этой теме, по-видимому, отсутствует информация), это достигается в 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 патчами, как это, вы можете добавить каждый элемент списка, чтобы его ширина была равна тени этой линии посередине, и когда она активирована, этот сегмент тени будет заменен стрелкой. Надеюсь, это поможет кому-то, так как это мне помогло!

Ответ 2

Я хочу сделать то же самое, что вы пытаетесь сделать; создайте эффект, чтобы один фрагмент был "ближе" к другому.

Roboguy отвечает, как иметь "селектор" белой стрелки в элементе списка; Я постараюсь быть более конкретным в отношении теней. Еще один хороший пример использования фоновых селекторов можно увидеть в исходном коде приложения Google IO 2011.. Когда у вас есть источник, посмотрите на селектора значков фрагмента_dashboard.xml.

Теневой разделитель - это градиент, применяемый к левой стороне представления. Есть две части:

Во-первых, сама "тень":

Рез/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>

Это должно быть сделано с относительной компоновкой (насколько мне известно). Если вы используете линейный макет, вы можете обернуть весь linearLayout внутри относительного макета, а затем добавить его с градиентом.

Обратите внимание, что если вы сделаете это, градиент <View> должен пройти ниже <LinearLayout>; в противном случае градиент будет нарисован под линейным расположением, поэтому вы его не увидите.