我有一个类似于平板电脑的 ICS Gmail 应用程序的布局(ListFragment
左侧和右侧的内容),我想知道如何构建布局,以便在两个片段之间有一个阴影分隔符(就像在 Gmail应用程序,如下所示)
.
另外,由于这适用于这个问题,我怎样才能在活动列表项的布局中拥有那个漂亮的三角形/箭头标记?我假设要实现这一点,ListView 本身必须位于阴影“层”之上,但我不知道如何创建它。
我有一个类似于平板电脑的 ICS Gmail 应用程序的布局(ListFragment
左侧和右侧的内容),我想知道如何构建布局,以便在两个片段之间有一个阴影分隔符(就像在 Gmail应用程序,如下所示)
.
另外,由于这适用于这个问题,我怎样才能在活动列表项的布局中拥有那个漂亮的三角形/箭头标记?我假设要实现这一点,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-patch 可绘制对象,您可以让每个列表项将其宽度值的阴影贡献给中间的那条线,并且当它被激活时,该部分阴影将被箭头替换。我希望这对某人有所帮助,因为它肯定对我有所帮助!
我正在寻找与您尝试做的事情相同的事情;创建一个片段比另一个片段“更接近”的效果。
Roboguy 的回答处理了如何在列表项上有白色箭头“选择器”;我将尝试更具体地说明阴影。 另一个使用背景选择器的好例子可以在 Google IO 2011 App 的源代码中看到。获得源代码后,查看 fragment_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>
这必须通过相对布局来完成(据我所知)。如果您使用的是线性布局,则可以将整个 linearLayout 包装在相对布局中,然后添加渐变。
请注意,如果这样做,渐变<View>
必须低于<LinearLayout>
; 否则,渐变将在线性布局下绘制,因此您将看不到它。