1

我正在尝试为 Android 2.1 创建一个自定义标题栏,它在某种程度上模拟了 Android 3.0 及更高版本中的 ActionBar。

到目前为止,我的运气还算不错,但是我找不到一种简单的方法来制作可以显示在 ActionBar 中图标/按钮下方的下拉列表。

我希望这些下拉列表能够跨越标题布局和内容布局之间的边界而不会被剪裁/截断。我还希望下拉列表相对位于 ActionBar 中的图标/按钮下方。我已经看到了使用 FrameLayouts 和 RelativeLayouts 的建议,但这些似乎并没有解决我的特定问题(除非我看错了)。我一直认为这一定是可能的,因为我相信较新版本的 Android 完全支持这种类型的行为。

这是我试图用一些笔记完成的截图。 http://img217.imageshack.us/img217/3279/67343249.png

请帮忙。谢谢!!!

4

3 回答 3

0

您需要使用FrameLayout保存您的内容。FrameLayout 可以容纳多个孩子,并且允许它们相互重叠。

可能的布局 xml 可能如下所示:

<FrameLayout>
    <LinearLayout android:margin_top="30dip">...</LinearLayout>
    <CustomActionBar />
</FrameLayout>

30dip只是您的 ActionBar 的高度,您可能希望在values. 您可以将 LienarLayout 替换为仅用于保存应用程序中其他内容的任何内容。

PS。我不确定 FrameLayout 是先渲染还是最后渲染第一个孩子。如果您发现线性布局的内容与 customactionbar 重叠,请交换它们的位置。

=== 编辑 ===

为了使代码更干净,可以这样做:

<CustomActionBar>
    <LinearLayout/>
</CustomActionBar>

它将自定义操作栏替换为使用操作栏的任何 xml 布局的“根”元素。在进行自定义操作栏时,您需要将其从 扩展FrameLayout,并相应地分配子级的边距。这个想法与我上面提出的想法非常相似。

于 2012-04-18T02:02:06.990 回答
0

我认为最好的方法是创建一个线性布局并将下拉列表项添加到该线性布局中。然后在按钮单击时添加线性布局,并使用相对布局布局参数将其显示在按钮下方。

于 2012-04-18T06:49:37.293 回答
0

经过几天的研究,我发现实现这一点的最佳方法是使用带有自定义主题的自定义对话框,其中包含 listView。当用户单击按钮时,对话框应直接显示在按钮下方。这提供了良好的用户体验,也意味着您不必完全改变您的基本布局结构来适应此功能。(这与 ActionBar Sherlocke 用于向后兼容菜单的方法基本相同)

这是我正在描述的代码片段(这是用 C# 编写的,使用 Mono for Android,但应该很容易翻译成 Java):

Dialog dlgHome = new Dialog(this, Resource.Style.ActionBarMenu);
dlgHome.SetCanceledOnTouchOutside(true);
dlgHome.SetContentView(Resource.Layout.ActionBarMenu);
ListView lsvHome = (ListView)dlgHome.FindViewById(Resource.Id.lsvHome);
lsvHome.Adapter = new ArrayAdapter<string>(this, Resource.Layout.ActionBarMenuItem, new string[] { "Add Activity", "Edit Log", "Program Details" });

Rect r = new Rect();
btnHome.GetLocalVisibleRect(r);
int x = r.Left + (int)TypedValue.ApplyDimension(ComplexUnitType.Dip, 5, Resources.DisplayMetrics);
int y = r.Bottom;

WindowManagerLayoutParams param = dlgHome.Window.Attributes;
param.Gravity = (int)(GravityFlags.Top | GravityFlags.Left);
param.X = x;
param.Y = y;
dlgHome.Window.Attributes = param;

此外,这里是样式 xml(在 style.xml 中)

<style name="ActionBarMenu" parent="android:Theme.Dialog">
<item name="android:windowBackground">@color/actionbar_menu_bg</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
于 2012-04-20T01:26:07.033 回答