第一步,为了兼容更低的版本,首先得引入V7的包,并且将Activity继承于ActionBarActivity,这个是为了兼容低版本,如果你的应用是3.0以上,这一步可以省略
第二步,将在manifest文件中将主题替换为@style/Theme.AppCompat.Light
好了,一个基本的Actionbar就创建好了
接下来,给Actionbar创建右边的按钮(也就是别人经常说显示不了的那三个点)
第一步,在resources/menu文件夹下,修改菜单布局(这个是官网拷贝过来的),
里面只有一个item,也就是只显示一个按钮,这个按钮是搜索按钮
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<!-- Search, should appear as action button -->
<item
android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
yourapp:showAsAction="ifRoom"/>
</menu>
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
//将菜单加载进来
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
这样这个按钮就添加完成了,
如果想给按钮设置一下点击事件,就在onOptionsItemSelected(MenuItem item)方法里判断下点击对应的id
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch(item.getItemId()){
case R.id.action_bar:
Log.i("huang", "搜索");
break;
}
return super.onOptionsItemSelected(item);
}
如果想让这个按钮带有搜索功能的,就在res/menu文件夹下按钮对应的item里加这一个属性
yourapp:actionViewClass="android.support.v7.widget.SearchView"
,这是一个兼容的低版本的属性,你的应用不需要兼容低版本,就设置这个就行了
android.widget.SearchView
这样子,点击搜索的按钮,一个搜索的编辑框就出来,这时候你还不能监听搜索框,想要监听需要自己去设置,
在 onCreateOptionsMenu(Menu menu)方法里添加监听的方法
@SuppressLint("NewApi")
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
//将菜单加载进来
getMenuInflater().inflate(R.menu.main, menu);
//得到搜索编辑控件,并进行监听
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(MainActivity.this);
return true;
}
如果你的应用程序不需要兼容低版本,就很好办了,直接导默认的包,就可以了,如果需要兼容低版本,就需要用v7的包,而且SearchView.getActionView();这个方法还需要通过注解标记为@SuppressLint("NewApi")这样,代码有提示
设置了监听之后,需要重载两个方法
//输完内容后,点击回车的时候回调
@Override
public boolean onQueryTextSubmit(String query) {
// TODO Auto-generated method stub
return false;
}
//搜索框的内容变化是回调
@Override
public boolean onQueryTextChange(String newText) {
// TODO Auto-generated method stub
Toast.makeText(this, newText, 1).show();
return false;
}
好了,大功告成
接下来,还没完,如何修改Actionbar的标题呢,很简单,只需在在Manifest文件的Activity节点中,设置下android:label="应用详情"这个属性即可,
还有,如何让这个标题响应点击事件呢,也简单,在当前Activity中写几行代码
//得到Actionbar对象
ActionBar actionBar = getSupportActionBar();
//设置标题可以响应点击事件
actionBar.setDisplayHomeAsUpEnabled(true);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
//android.R.id.home,这个是actionbar标题的id
if(item.getItemId()==android.R.id.home){
finish();<pre name="code" class="html"><activity android:name="com.example.mygoogleplay.AppDetail"
android:label="应用详情"
android:parentActivityName="com.example.mygoogleplay.MainActivity"
>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.mygoogleplay.MainActivity" />
</activity>
}return super.onOptionsItemSelected(item);}
也可以在Manifest文件中配置,个人推荐用代码,感觉这样配置好麻烦
<activity android:name="com.example.mygoogleplay.AppDetail"
android:label="应用详情"
android:parentActivityName="com.example.mygoogleplay.MainActivity"
>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.mygoogleplay.MainActivity" />
</activity>