Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
操作栏:旧Android版本的最佳实践_Android_User Interface_Navigation_Titlebar - Fatal编程技术网

操作栏:旧Android版本的最佳实践

操作栏:旧Android版本的最佳实践,android,user-interface,navigation,titlebar,Android,User Interface,Navigation,Titlebar,我希望在我的应用程序顶部有一个菜单栏,就像Facebook、Google+或Twitter一样: 这是Twitter应用程序的屏幕截图,显示了这个栏:它显示在每个活动中,并在左侧显示公司徽标(可单击),在右侧显示1-3个菜单项(可单击图像) 也可以在GDCatalog应用程序中看到: 因此,该操作栏有一些要求: 它也必须在旧的Android平台上工作,比如API级别8 它必须在每个活动中都可用,而无需反复重复代码 它必须适应屏幕的大小,以使其具有全宽 实施此类操作栏的最佳实践是什么? G

我希望在我的应用程序顶部有一个菜单栏,就像Facebook、Google+或Twitter一样:

这是Twitter应用程序的屏幕截图,显示了这个栏:它显示在每个活动中,并在左侧显示公司徽标(可单击),在右侧显示1-3个菜单项(可单击图像)

也可以在GDCatalog应用程序中看到:

因此,该操作栏有一些要求:

  • 它也必须在旧的Android平台上工作,比如API级别8
  • 它必须在每个活动中都可用,而无需反复重复代码
  • 它必须适应屏幕的大小,以使其具有全宽
实施此类操作栏的最佳实践是什么?

GreenDroid就是这样做的(使用合并):


这是一个好的解决方案吗?它是否也适用于较旧的平台?这里还缺少哪些编码部分

我知道我们可以在这里找到一些关于这些动作条的问题。但尽管如此,我还是无法找到实现菜单栏跨(几乎)所有API级别工作的最佳和最简单的方法。也许是最好的


提前多谢

您可能想签出该文件。源代码是可用的。它将使您了解如何将其与片段一起使用。它会给你一些关于如何进行的想法


谷歌创建了一个android兼容性库,以使用他们为蜂巢(honeycomb)在1.5及以上版本上创建的一些新API。可以在android sdk文件夹中找到它,如E:\Program Files\android\android sdk windows\android compatibility\v4\android-support-v4.jar。如果您没有这个jar,您需要使用avd管理器下载它。

简单地创建一个包含在每个活动布局中的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平台版本,对吗?

我个人的偏好是使用AndroidBarSherlock。这是一个优秀的软件包,性能非常好。如果要避免碎片,还可以使用。android actionbar的唯一一点是,您必须将actionbar添加到每个布局中。

我所做的是添加了一个名为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>
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及以上版本兼容。我还没有测试过Under2.1,但我不明白为什么它不能与以前的版本兼容。

谷歌在最新版本中增加了对旧版本Android上ActionBars的支持(18)。您必须使用并包含android.support.v7.appcompat支持库。它提供了对API 7(2.1)的支持。

最佳和最简单是主观的。为什么你不尝试一下,当你有一个具体的问题时再回来。“最佳实践”从来都不是主观的。对于一些开发人员来说,它始终是最好的解决方案。如果我问这里的每个开发人员他或她喜欢的解决方案,我们就会知道什么是最好的解决方案。当然,我不想知道有人喜欢哪种解决方案,我们都想知道原因和论点。我有一个特别的问题:我不知道我应该如何实现那个动作条谢谢你的建议!不幸的是,为了启用ActionBarSherlock,您必须声明所有活动以扩展FragmentActivity。但是我的活动已经全部结束了ListActivity。因为我不能扩展两个类,所以我不能使用它,可以吗?这里有一个列表片段。您可能需要阅读一些片段教程。这是蜂窝带来的一个新概念。好的,谢谢你的加入。但是片段只有在API级别11之后才可用,不是吗?如何在Android 2.2或2.3上使用它?要使用ActionBarSherlock,您必须将所有ListActivities更改为包含ListFragments的FragmentActivities。从长远来看,这可能是一件好事,因为这将使你在平板设备上的应用布局变得更加容易。ActionBarSherlock包括整个Android兼容性库和ActionBar功能,这意味着您可以在任何版本的Android中使用片段和加载程序,直到1.6(API版本4)。非常好。非常感谢你的评论,路易埃乔。如何声明我的活动以扩展包含ListFragment的FragmentActivity?非常感谢:)布局xml文件包含RelativeLayout而TitleBar.java Extraends LinearLayout是否正确?全幅样式文件中是什么?实际上,我的标题栏布局是使用RelativeLayout的,但它可以使用任何东西。这对我来说很方便,因为我想要一个标题和子标题都对齐的图像。至于样式,它实际上只是我使用的一个快捷方式:wrap\u content fill\u parent我有类似的FillParent和WrapContent。这是我经常使用的三种基本样式,我厌倦了一直打字。他们是我很多其他风格的父母。非常感谢!这个图书馆也很有趣
<com.sample.ui.TitleBar style="@style/FullWidth" />