将我的 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>
如您所见,我的父母
ViewGroup
是RelativeLayout
,这很简单 允许我在屏幕底部创建一个视图。请注意,我将布局填充设置为零(我认为:设置布局 此处的保证金为零是没有必要的,效果相同)。如果你愿意 改变它,工具栏不会使用全宽,也不会坚持 屏幕底部。
然后我添加了一个带有硬编码高度的线性布局:
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 放在底部的主要内容,如果未能解决你的问题,请参考以下文章