我想在我的应用程序顶部设置一个菜单栏 - 就像Facebook,Google +或Twitter一样:
以下是Twitter应用程序的屏幕截图,其中显示了此栏:它显示在每个活动中,并在左侧显示公司徽标(可点击)和右侧显示1-3个菜单项(可点击图片)。
也可以在GDCatalog应用程序中看到:
因此,该操作栏有一些要求:
实施此类操作栏的最佳做法是什么?
GreenDroid就是这样(使用合并):
<?xml version="1.0" encoding="utf-8"?>
<!--
/*
** Copyright (C) 2010 Cyril Mottier (http://www.cyrilmottier.com)
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<merge
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageButton
xmlns:android="http://schemas.android.com/apk/res/android"
style="?attr/gdActionBarItemStyle"
android:id="@+id/gd_action_bar_item"
android:layout_height="fill_parent"
android:scaleType="center" />
<ImageView
android:layout_width="?attr/gdActionBarDividerWidth"
android:layout_height="fill_parent"
android:background="?attr/gdActionBarDividerDrawable" />
<TextView
style="?attr/gdActionBarTitleStyle"
android:id="@+id/gd_action_bar_title"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:gravity="left|center_vertical"
android:singleLine="true"
android:textColor="?attr/gdActionBarTitleColor"
android:textSize="16sp"
android:textStyle="bold"
android:paddingRight="10dp"
android:paddingLeft="10dp" />
</merge>
这是一个很好的解决方案吗?它也可以在旧平台上运行吗?这里还缺少哪些编码部分?
我知道我们可以在这里找到关于这些动作栏的几个问题。但是,我无法找到实现跨(几乎)所有API级别的菜单栏的最佳和最简单的方法。 Google's solution可能是最好的吗?
提前多多感谢!
答案 0 :(得分:14)
您可能想要结帐ActionBarSherlock。源代码可用here。它将让您了解它如何与片段一起使用。它会告诉你如何继续。
有一个Android兼容性库,谷歌创建它来使用他们为较低版本(如1.5及以上版本)创建蜂窝的一些新API。它可以在android sdk文件夹中找到,如E:\ Program Files \ Android \ android-sdk-windows \ android-compatibility \ v4 \ android-support-v4.jar。如果你没有这个罐子,你需要使用avd管理器下载它。
答案 1 :(得分:2)
我个人的偏好是使用AndroidBarSherlock。这是一个很好的包装,表现非常好。如果您想避免碎片,也可以使用Android-ActionBar。关于android-actionbar的唯一事情就是你必须在每个布局中添加动作栏。
答案 2 :(得分:2)
我所做的是添加一个名为titlebar.xml的xml布局文件,它看起来像:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android" style="@style/FullWidth">
<RelativeLayout style="@style/FullWidth">
<ImageView style="@style/WrapContent" android:src="@drawable/mylogo" android:layout_centerVertical="true" android:id="@+id/imageViewIcon" />
<TextView style="@style/Title" android:layout_toRightOf="@+id/imageViewIcon" android:layout_toLeftOf="@+id/buttonSomeButton" android:id="@+id/textViewAppName" android:text="@string/appName"/>
<TextView style="@style/SubTitle" android:text="@string/empty" android:layout_marginLeft="3dip" android:layout_toRightOf="@+id/imageViewIcon" android:layout_toLeftOf="@+id/buttonSomeButton" android:layout_below="@+id/textViewAppName" android:id="@+id/textViewSubtitle" />
<Button style="@style/NormalButton" android:id="@+id/buttonSomeButton" android:drawableRight="@drawable/button_image" android:layout_centerVertical="true" android:layout_alignParentTop="true" android:layout_alignParentRight="true" />
</RelativeLayout>
</merge>
然后我创建了一个扩展LinearLayout的控件,名为TitleBar.java,它看起来像:
package com.sample.ui;
public class TitleBar extends LinearLayout {
public TitleBar(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.titlebar, this);
}
}
您可以在此课程中连接所有按钮。如果需要自定义按钮处理程序,可以在此类中创建set方法。它可以很好地包含在一个控件中。
要在我想要包含此标题栏的任何XML文件中使用它,请执行以下操作:
<com.sample.ui.TitleBar style="@style/FullWidth" />
这适合我的目的,它与2.1及以上版本兼容。我没有用2.1以下的测试,但我不明白为什么它不适用于以前的版本。
答案 3 :(得分:2)
谷歌在最新版Android Support Library(18)中添加了对旧版Android上ActionBars的支持。您必须使用ActionBarActivity并包含android.support.v7.appcompat支持库。它提供了对API 7(2.1)的支持
答案 4 :(得分:1)
如何简单地创建XML布局文件,例如“top_bar.xml”,包含在每个活动的布局中?
因此,在每个活动的布局文件中,您需要一个线性布局(垂直方向)作为父级,然后添加以下内容:
<include layout="@layout/custom_action_bar" android:id="@+id/action_bar" />
然后,您必须将自定义操作栏中所有项目的onclick侦听器添加到这些活动的源文件中。
布局文件“custom_action_bar.xml”可能如下所示:
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/APP_ICON" />
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#ff0000" android:text="APP_TITLE">
</merge>
这不是一个简单的解决方案,但可能适用于所有Android平台版本,对吧?