ActionBar使用
最后更新于:2022-04-01 14:43:53
安卓SDK11.0版本以上就支持Action Bar了。所谓的Action Bar实际上就是代替以前的标题栏的存在,如果设置了那就会在Activity的顶部显示,我们可以在AndroidManifest.xml里面这样显示声明ActionBar:android:theme="@android:style/Theme.Holo"
一般情况下,我们需要在onCreateOptionsMenu里面把自定义的视图加载进去:
~~~
@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);
return true;
}
~~~
然后可以知道我们加载了一个R.menu.main的视图,这个视图是这样写的:
~~~
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/>
<item
android:id="@+id/writeArticle"
android:icon="@drawable/ic_launcher"
android:showAsAction="always"
android:title="写文章">
</item>
</menu>
~~~
第一个item是菜单,第二个item是我自定义的一个项。
其中要注意两个地方:
1)showAsAction:设置该条目什么时候显示在ActionBar里面
这个属性可接受的值有:
1、always:这个值会使菜单项一直显示在Action Bar上。
2、ifRoom:如果有足够的空间,这个值会使菜单项显示在Action Bar上。
3、never:这个值使菜单项永远都不出现在Action Bar上。
4、withText:这个值使菜单项和它的图标,菜单文本一起显示。
2)orderInCategory:actionbar里每个item的优先级,值越大优先级越低,actionbar地方不够就会放到overflow中。
那么设置了item之后怎么监听点击事件呢?
其实item点击之后会触发Activity里面的onOptionsItemSelected回调函数,下面是我处理的代码:
~~~
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.writeArticle:
Toast.makeText(this, "write", 0).show();
break;
default:
Toast.makeText(this, "null", 0).show();
break;
}
return super.onOptionsItemSelected(item);
}
~~~
这样设置我通过点击自定义的item writeArticle就能够Toast一条信息了。
最后是完整的Activity代码,还是贴出来吧,很简单。
~~~
package com.example.luntan;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@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);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.writeArticle:
Toast.makeText(this, "write", 0).show();
break;
default:
Toast.makeText(this, "null", 0).show();
break;
}
return super.onOptionsItemSelected(item);
}
}
~~~