将我的 ActionBar 放在底部

Posted

技术标签:

【中文标题】将我的 ActionBar 放在底部【英文标题】:Placing my ActionBar at the bottom 【发布时间】:2012-08-26 13:43:11 【问题描述】:

我遵循了有关在我的应用中获取操作栏的教程。但即使我将android:uiOptions="splitActionBarWhenNarrow" 放在我的清单文件中,它仍然保持在顶部。有人对如何处理此代码有任何想法吗?

XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_ 
android:orientation="vertical"
android:background="#f0f0f0" 
android:baselineAligned="false">

<LinearLayout 
    android:id="@+id/myFragments"
    android:layout_
    android:layout_>

</LinearLayout>

</LinearLayout>

清单文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.alotoftesting"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="15" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" 
        android:uiOptions="splitActionBarWhenNarrow">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

【问题讨论】:

您在哪个 SDK 版本上运行它?我看到你的目标是 15 岁,你的最低目标是 11 岁。 我从未听说过能够移动操作栏。如果你弄清楚了,请在此处发布答案。 ActionBar 中有多少个菜单项?如果您的菜单项不适合顶部,splitActionBarWhenNarrow 选项基本上允许溢出到底部的第二个“拆分”操作栏。如果您的所有菜单项都位于顶部,您将看不到拆分布局。 @Quinma 我在我的蜂窝模拟器上运行它。 该死的,真的没有办法把这个放在底部吗? 【参考方案1】:

根据这条评论:

您的 ActionBar 中有多少个菜单项?这 splitActionBarWhenNarrow 选项基本上允许溢出到一个 其次,如果您的菜单项不适合,则在底部“拆分”操作栏 在顶部。如果您的所有菜单项都位于顶部,您将看不到 拆分布局。

如果您想要自定义底部工具栏,请查看我对这个问题的回答(添加在下面):

创建自定义底部工具栏

我已经创建了一个简单的应用程序,它应该向您展示如何 开始

创建自定义视图组

这是我的activity_main.xml 布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:padding="0dp"
    tools:context="com.example.piotr.myapplication.MainActivity">

    <LinearLayout
        android:id="@+id/show_pdf"
        android:layout_
        android:layout_
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:background="@color/primary_material_light"
        android:orientation="horizontal">

        <ImageButton
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:src="@drawable/abc_ic_menu_cut_mtrl_alpha"/>

        <ImageButton
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:src="@drawable/abc_ic_menu_copy_mtrl_am_alpha"/>

        <ImageButton
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:src="@drawable/abc_ic_menu_selectall_mtrl_alpha"/>

        <ImageButton
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:src="@drawable/abc_ic_menu_paste_mtrl_am_alpha"/>

        <ImageButton
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:src="@drawable/abc_ic_menu_share_mtrl_alpha"/>

        <ImageButton
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:src="@drawable/abc_ic_menu_selectall_mtrl_alpha"/>

        <ImageButton
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:src="@drawable/abc_ic_menu_moreoverflow_mtrl_alpha"/>
    </LinearLayout>

    <EditText
        android:id="@+id/editText"
        android:layout_
        android:layout_
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="75dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Name"/>
</RelativeLayout>

如您所见,我的父母 ViewGroupRelativeLayout,这很简单 允许我在屏幕底部创建一个视图。

请注意,我将布局填充设置为零(我认为:设置布局 此处的保证金为零是没有必要的,效果相同)。如果你愿意 改变它,工具栏不会使用全宽,也不会坚持 屏幕底部。

然后我添加了一个带有硬编码高度的线性布局:

          android:layout_

我想要它,我的底部工具栏将占用完整的可用宽度,所以 我设置为match_parent

接下来,我添加了一些带有 Android 图像的 ImageButton 视图 图书馆。

你有两种可能:

如果你真的想要像上面例子中那样的工具栏,只需删除每个ImageButton 查看这一行:

      android:layout_weight="1"

移除权重和一些按钮后,您会看到漂亮的视图 与预期相似:

如果您想采用全宽并让每个按钮都具有相同大小,请在您的项目中使用weight,就像这个我的示例一样。

现在让我们转到我的 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.example.piotr.myapplication"
          xmlns:android="http://schemas.android.com/apk/res/android">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:windowSoftInputMode="stateVisible|adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

在我添加的那个文件中,你只能看到一行:

         android:windowSoftInputMode="stateVisible|adjustResize">

确保设备键盘不会隐藏我的自定义底部工具栏。

发件人:How to add a bottom menu to Android activity

我认为如果需要,您也可以将标签放在底部。

如果您有任何问题,请随时提问。

希望对你有帮助

【讨论】:

【参考方案2】:

谷歌默认操作栏无论如何都不会出现在底部。正如其他人所提到的,splitActionBarWhenNarrow 仅在设备较窄时将ActionBar 的一个子集(如选项卡等)放在屏幕底部。不幸的是,如果您想在屏幕底部实现类似 ActionBar 的界面,您必须自己实现 (a quick search finds this example),因为我还没有看到任何库可以为您执行此操作。

不过,我建议不要这样做,因为它违反了设计文档中的Seamlessness design principle,因为它打破了用户对 ActionBar 类型控件将在哪里的期望 - 理想情况下,android 用户习惯于以某种方式做事,你需要一个非常有说服力的理由来打破这种期望。

【讨论】:

splitActionBarWhenNarrow 将操作项(在菜单 xml 中定义)而不是标签移动到底部 作为一名设计师和开发人员,我不得不不同意你在最后一段中的观点。虽然是的,它会违反 Android UI 准则,但谁能说这是为应用程序设计 UI 的唯一方法。指南有助于确保大多数 Android 应用程序是可识别的,从而减少用户的学习曲线。但是,如果您知道自己在做什么,则可以稍微突破极限并进行实验,只要您不妨碍用户体验即可。 @AlexVPerl 正如我所说,你的理由应该是令人信服的,以打破期望 - 我不能排除有一个用例,在那里有那个栏会使应用程序更好。然而,它不应该轻易完成。正如您所说,当您偏离准则时,您应该确保自己知道自己在做什么 实际上是 Droid Edit,或者我知道的任何文本编辑器都会在底部放置 UI 控件,例如撤消。和顶部的导航标签

以上是关于将我的 ActionBar 放在底部的主要内容,如果未能解决你的问题,请参考以下文章

Android界面编程--使用活动条(ActionBar)

Android ActionBar

我正在尝试将我的精灵定位在手机的底部中心

在屏幕底部放置一个视图

(Android UI)Action Bar

将 Android Navigation Drawer 放在顶部 ActionBar 上失败