Теневой разделитель между Android-фрагментами
У меня есть макет, похожий на приложение ICS Gmail для планшетов (ListFragment
слева и содержимое справа), и мне было интересно, как я могу построить конструкцию, чтобы между двумя разделителями был теневой разделитель фрагменты (например, в приложении Gmail, как показано ниже)
. ![Just look at that beautiful shadow!]()
Кроме того, поскольку это применимо к этому вопросу, как я могу использовать этот красивый треугольник/указатель стрелки в макете активного списка? Я предполагаю, что для реализации этого, ListView сам должен лежать выше теневой слой, но я понятия не имею, как его создать.
Ответы
Ответ 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>
; в противном случае градиент будет нарисован под линейным расположением, поэтому вы его не увидите.