版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/androidzf/article/details/87799126
一、ActionBar的显示和隐藏
1、声明ActionBar对象
private ActionBar actionBar;
2、得到ActionBar对象
this.actionBar=this.getSupportActionBar();
3、启用ActionBar上的返回键
this.actionBar.setDisplayHomeAsUpEnabled(true);
4、显示和隐藏ActionBar
public void opeActionBar(View view){
Button button= (Button) view;
boolean isShowing=this.actionBar.isShowing();
if(isShowing){
this.actionBar.hide();//隐藏ActionBar
button.setText("显示ActionBar");
}else{
this.actionBar.show();//显示ActionBar
button.setText("隐藏ActionBar");
}
}
5、添加menu菜单栏对象
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}else if(id==android.R.id.home){//android.R.id.home的值就是ActionBar上显示的返回键的id
this.finish();
System.out.println("销毁当前Activity");
}
return super.onOptionsItemSelected(item);
}
二、ActionLayout,ActionProvider的使用
res/menu/menu_main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<!--
app:actionViewClass="android.support.v7.widget.SearchView":指定SearchView类的完整包名+类名;
app:showAsAction="always":总是显示在ActionBar上
-->
<item
android:id="@+id/action_file"
android:orderInCategory="100"
android:title="文件"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always" />
<!--
app:actionLayout="@layout/action_layout":指定当前条目关联的布局文件
app:showAsAction="always|collapseActionView":showAsAction的值必须同时设置成always|collapseActionView才可以
进行自由的展开和折叠,否则没有效果了.
-->
<item
android:id="@+id/action_edit"
android:orderInCategory="100"
android:title="编辑"
app:actionLayout="@layout/action_layout"
app:showAsAction="always|collapseActionView" />
<!--
app:actionProviderClass="android.support.v7.widget.ShareActionProvider":指定ShareActionProvider的完整包名+类名
-->
<item
android:id="@+id/action_view"
android:orderInCategory="100"
android:title="查看"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
app:showAsAction="always" />
<item
android:id="@+id/action_navigate"
android:orderInCategory="100"
android:title="导航"
app:showAsAction="always" />
<item
android:id="@+id/action_code"
android:orderInCategory="100"
android:title="编码"
app:showAsAction="always" />
</menu>
Res/layout/action_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<AnalogClock
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/analogClock"
android:layout_gravity="center_horizontal" />
</LinearLayout>
展开ActionLayout
public void expandable(View view){
//得到菜单项对象
MenuItem menuItem_edit= this.menu.findItem(R.id.action_edit);
//menuItem_edit.isActionViewExpanded():判断是否已经展开View对象
if(!menuItem_edit.isActionViewExpanded()){
menuItem_edit.expandActionView();//展开ActionView对象
}
}
折叠ActionLayout
public void collapse(View view){
//得到菜单项对象
MenuItem menuItem_edit= this.menu.findItem(R.id.action_edit);
//如果view已经展开,则进行折叠
if(menuItem_edit.isActionViewExpanded()){
menuItem_edit.collapseActionView();//折叠ActionView对象
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
this.menu=menu;
MenuItem menuItem_file= menu.findItem(R.id.action_file);
//得到SearchView的方式一:menuItem_file.getActionView()
//SearchView searchView= (SearchView) menuItem_file.getActionView();
//得到SearchView的方式二:MenuItemCompat.getActionView(menuItem_file)
SearchView searchView= (SearchView) MenuItemCompat.getActionView(menuItem_file);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
System.out.println("====onQueryTextSubmit(String query=" + query + ")===");
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
System.out.println("===onQueryTextChange(String newText=" + newText + ")===");
return false;
}
});
MenuItem menuItem_edit= menu.findItem(R.id.action_edit);
//给ActionLayout对注册展开和折叠时操作对应的监听器对象
MenuItemCompat.setOnActionExpandListener(menuItem_edit, new MenuItemCompat.OnActionExpandListener() {
/**
* 展开ActionView对象时自动调用的方法
* @param item
* @return true:表示可以展开,否则不可以,此处必须为true
*/
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
textView_info.setText("展开了"+item.getTitle()+"对应的View对象");
System.out.println("====onMenuItemActionExpand(MenuItem item="+item+")===");
return true;
}
/**
* 折叠ActionView时自动调用的方法
* @param item
* @return true:表示可以折叠,否则不可以,此处必须为true
*/
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
textView_info.setText("折叠了"+item.getTitle()+"对应的View对象");
System.out.println("===onMenuItemActionCollapse(MenuItem item="+item+")====");
return true;
}
});
View view= menuItem_edit.getActionView();
AnalogClock analogClock= (AnalogClock) view.findViewById(R.id.analogClock);
analogClock.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "时钟被点击了!", Toast.LENGTH_SHORT).show();
}
});
//得到查看菜单项对象
MenuItem menuItem_view=menu.findItem(R.id.action_view);
ShareActionProvider shareActionProvider= (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem_view);
//shareActionProvider.setShareIntent(this.getShareTextIntent());
shareActionProvider.setShareIntent(this.getShareImageIntent());
return true;
}
三、ActionBar的选项卡模式的使用
this.actionBar=this.getSupportActionBar();
// ActionBar.NAVIGATION_MODE_STANDARD:默认值,使用的菜单文件生成菜单项
//ActionBar.NAVIGATION_MODE_TABS:显示成选项卡供用户进行选择
this.actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); //设置导航模式为选项卡模式
添加选项卡对象
ActionBar.Tab tab_file= this.actionBar.newTab();
tab_file.setText("文件");//设置选项卡显示的文字
tab_file.setIcon(R.mipmap.ic_launcher);//设置选项卡显示的图标
tab_file.setTabListener(tabListener);//给选项卡设置监听器对象
this.actionBar.addTab(tab_file);//将当前选项卡添加到ActionBar上
自定义选项卡监听器对象
private class MyTabListener implements ActionBar.TabListener {
/**
* 当选项卡处于选中状态时自动调用的方法
* @param tab
* @param ft
*/
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
System.out.println("===onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)=====");
MyFragment myFragment=new MyFragment();
Bundle bundle=new Bundle();
bundle.putString("title",tab.getText().toString());
myFragment.setArguments(bundle);
ft.replace(R.id.linearLayout_content,myFragment);
}
/**
* 当选项卡失去选中状态时自动调用的方法
* @param tab
* @param ft
*/
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
System.out.println("====onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft)====");
}
/**
* 当一个选项卡已经处于选中状态后用户又重新选中时自动调用的方法
* @param tab
* @param ft
*/
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
System.out.println("===onTabReselected(ActionBar.Tab tab, FragmentTransaction ft)=====");
}
}
四、ActionBar的列表模式的使用
private String[] data={"文件","编辑","查看"};
this.fragmentManager=this.getSupportFragmentManager();
this.actionBar=this.getSupportActionBar();
this.actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);//设置ActionBar的导航模式为列表模式
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
this.actionBar.setListNavigationCallbacks(adapter, new ActionBar.OnNavigationListener() {
//当选择actionBar上的导航条目时自动调用的方法
@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
FragmentTransaction fragmentTransaction= fragmentManager.beginTransaction();
MyFragment myFragment=new MyFragment();
Bundle bundle=new Bundle();
bundle.putString("title",data[itemPosition]);
myFragment.setArguments(bundle);
fragmentTransaction.replace(R.id.linearLayout_content,myFragment);
fragmentTransaction.commit();
return false;
}
});
五、通过功能清单文件设置主题
android:theme="@android:style/Theme.Translucent":透明主题
android:theme="@android:style/Theme.NoTitleBar.Fullscreen":没有标题栏和状态栏,即全屏显示
android:theme="@android:style/Theme.NoTitleBar":没有标题栏但有状态栏