1.Action Bar 介绍
我们能在应用中看见的actionbar一般就是下图的样子,比如快图应用
1.App icon 应用的图标,左侧带应用相当于back返回键
2.ViewControl
3.Action button 相当于普通的Button可以监听点击事件
4.Action overflow 三个点,相当于手机上的menu键,可以显示隐藏的action button
下面是一个简单的关于Action Bar的例子:
package com.example.demo_actionbarbasic;
import com.example.demo_actionbarbasic.R;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends Activity {
private MenuItem menuItem = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 通过hilde()和show()方法可以控制actionbar的隐藏和显示
// ActionBar actionBar = getActionBar();
// actionBar.hide();
// actionBar.show();
}
// 我们可以看到,actonbar的用法跟选项菜单是一样的
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_refresh:
Toast.makeText(this, "Menu Item refresh selected",
Toast.LENGTH_SHORT).show();
break;
case R.id.action_about:
Toast.makeText(this, "Menu Item about selected", Toast.LENGTH_SHORT)
.show();
break;
case R.id.action_edit:
Toast.makeText(this, "Menu Item edit selected", Toast.LENGTH_SHORT)
.show();
break;
case R.id.action_search:
Toast.makeText(this, "Menu Item search selected",
Toast.LENGTH_SHORT).show();
break;
case R.id.action_help:
Toast.makeText(this, "Menu Item settings selected",
Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="settings"/>
<item
android:id="@+id/action_refresh"
android:icon="@drawable/navigation_refresh"
android:orderInCategory="101"
android:showAsAction="ifRoom|withText"
android:title="refresh"/>
<item
android:id="@+id/action_about"
android:icon="@drawable/action_about"
android:orderInCategory="101"
android:showAsAction="ifRoom"
android:title="about"/>
<item
android:id="@+id/action_search"
android:icon="@drawable/action_search"
android:orderInCategory="103"
android:showAsAction="ifRoom"/>
<item
android:id="@+id/action_edit"
android:icon="@android:drawable/ic_menu_edit"
android:orderInCategory="105"
android:showAsAction="ifRoom"
android:title="edit"/>
<item
android:id="@+id/action_help"
android:showAsAction="always"
android:title="help"/>
<item
android:id="@+id/action_email"
android:icon="@android:drawable/ic_dialog_email"
android:orderInCategory="106"
android:showAsAction="ifRoom"
android:title="email"/>
</menu>
onCreateOptionsMenu()方法用来加载menu文件夹中定义的xml文件,用来显示action bar。onOptionsItemSelected()方法用来加入点击事件。
效果图:
左图的效果我们看到只能显示两个action button,由于屏幕的空间有限,其他的action button会被隐藏。横屏的时候我们可以显示4个,还有3个被隐藏起来了。当我们按手机上的更多键时可以显示出来关于action button的文字信息,一定要在item标签中加入title属性。
android:showAsAction="ifRoom"ifRomm表示有空间的时候显示。
android:showAsAction="always"表示总是显示
android:showAsAction="ifRoom|withText"有空间的时候同时显示title标题
其他属性可以自己试试。
2.显示3个点的更多action button
从上面的代码我们知道,即使我们横屏也显示不出全部action button。我们可以加入3个点的action button来用下拉显示的方式,显示跟多的action button。在网上的信息得知,只要你的手机有menu键actionbar就不会显示3个点的更多或者说3个点的menu按钮。从上面的代码我们知道,即使我们横屏也显示不出全部action button。我们可以加入3个点的action button来用下拉显示的方式,显示跟多的action button。在网上的信息得知,只要你的手机有menu键actionbar就不会显示3个点的更多或者说3个点的menu按钮。
private void getOverflowMenu() {
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"