Вопрос

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

.Just look at that beautiful shadow!

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

Это было полезно?

Решение

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

Другие советы

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

Ответ Робогая описывает, как установить «селектор» с белой стрелкой в ​​элементе списка;Попробую более подробно рассказать о тенях.Еще один хороший пример использования селекторов фона можно увидеть в исходном коде приложения Google IO 2011. Получив исходный код, посмотрите на селекторы значков фрагмента_dashboard.xml.

Разделитель теней представляет собой градиент, применяемый к левой стороне изображения.Есть две части;

Сначала сама «тень»:

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>

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top