ActionBar
简介:
- 取代3.0之前的标题栏,导时用v7包
- 提供一个用于识别应用程序的标示和用户的位置专属空间
- 在不同的应用程序之间提供一致的导航和视觉体验
- 突出Activity的关键操作(如“搜索”,创建,共享等),并且在可预见的方法内给用户提供快捷的访问
删除,添加:
- 默认拥有ActionBar: ActionBar actionBar = getSupportActionBar() ;
- 隐藏:actionBar.hide();
标题栏:
- 启用分离式操作栏:在<application>或<activity>元素中添加uiOptions="splitActionBarWhenNarrow"
- 导航栏使用应用图标响应两个操作之一:
- 返回应用的“主”Activity:
- 响应应用程序上级页面导航
- 当用户触摸这个图标时,系统会调用Activity带有android.R.id.home ID的onOptionsItemSelected方法。注意要使用应用图标来返回主页面,从Adroid4.0(API 14)开始,必须同过调用setHomeButtonEnabled(true)方法确保这个图标能够作为一个操作项
菜单:
在menu文件nnn.xml中:设置菜单内容:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_share" android:icon="@mipmap/ic_launcher" android:title="分享" app:actionProviderClass="android.support.v7.widget.ShareActionProvider" app:showAsAction="always"/> <!--app:actionViewClass="android.support.v7.widget.SearchView"必须使用v7包下--> <item android:id="@+id/action_search" android:icon="@mipmap/ic_launcher" android:title="搜索" app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="always"/> </menu>
在activity中找到相应的对象:
1 package com.example.yang.actionbar_demo; 2 import android.content.Intent; 3 import android.os.Bundle; 4 import android.support.v4.view.MenuItemCompat; 5 /*注意到正确的包v7包*/ 6 import android.support.v7.app.ActionBar; 7 import android.support.v7.app.AppCompatActivity; 8 import android.support.v7.widget.SearchView; 9 import android.support.v7.widget.ShareActionProvider; 10 import android.view.Menu; 11 import android.view.MenuItem; 12 import android.view.View; 13 import android.widget.Toast; 14 public class MainActivity extends AppCompatActivity implements ShareActionProvider.OnShareTargetSelectedListener { 15 @Override 16 protected void onCreate(Bundle savedInstanceState) { 17 super.onCreate(savedInstanceState); 18 setContentView(R.layout.activity_main); 19 ActionBar actionBar = getSupportActionBar() ; 20 /*隐藏*/ 21 // actionBar.hide(); 22 /*作为图使用*/ 23 actionBar.setHomeButtonEnabled(true); 24 // actionBar.setDisplayHomeAsUpEnabled(true); 25 } 26 public void startActivity1_Click(View view) { 27 startActivity(new Intent(this,MainActivity1.class)); 28 } 29 ShareActionProvider provider; 30 SearchView searchView ; 31 /*创建菜单*/ 32 @Override 33 public boolean onCreateOptionsMenu(Menu menu) { 34 /*将位置文件nnn.xml导入对象menu*/ 35 getMenuInflater().inflate(R.menu.nnnn, menu); 36 /*同过findItent方法拿到相应的MenuItem管理对象*/ 37 MenuItem item = menu.findItem(R.id.action_share); 38 MenuItem item1 = menu.findItem(R.id.action_search); 39 /*通过MenuItemCompat拿到相应的对象*/ 40 provider = (ShareActionProvider) MenuItemCompat.getActionProvider(item); 41 // searchView = (SearchView) MenuItemCompat.getActionView(item1); 42 // 第二种获取searchView方法 43 searchView = (SearchView)item1.getActionView(); 44 /*搜索事件监听*/ 45 provider.setOnShareTargetSelectedListener(this); 46 searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 47 @Override 48 public boolean onQueryTextSubmit(String query) { 49 Toast.makeText(getApplicationContext(),query,Toast.LENGTH_SHORT).show(); 50 return false; 51 } 52 @Override 53 public boolean onQueryTextChange(String newText) { 54 return false; 55 } 56 }); 57 /*调用父类方法*/ 58 return super.onCreateOptionsMenu(menu); 59 } 60 @Override 61 public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) { 62 return false; 63 } 64 }
导航栏:
在Activity中直接设置:
1 import android.support.v4.app.FragmentTransaction; 2 import android.support.v7.app.ActionBar; 3 import android.support.v7.app.AppCompatActivity; 4 import android.os.Bundle; 5 import android.widget.Toast; 6 public class MainActivity2 extends AppCompatActivity implements ActionBar.TabListener{ 7 @Override 8 protected void onCreate(Bundle savedInstanceState){ 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.activity_main2); 11 ActionBar actionBar = getSupportActionBar(); 12 /*不推荐使用*/ 13 actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 14 /*标题栏不显示*/ 15 actionBar.setDisplayShowTitleEnabled(false); 16 /*添加选项卡*/ 17 actionBar.addTab(actionBar.newTab().setText("新闻").setTabListener(this)); 18 actionBar.addTab(actionBar.newTab().setText("音乐").setTabListener(this)); 19 actionBar.addTab(actionBar.newTab().setText("电影").setTabListener(this)); 20 actionBar.addTab(actionBar.newTab().setText("娱乐").setTabListener(this)); 21 } 22 /*FragmentTransaction:替换你想要的fragment*/ 23 @Override 24 public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { 25 Toast.makeText(this,tab.getText(),Toast.LENGTH_SHORT).show(); 26 } 27 @Override 28 public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { 29 } 30 @Override 31 public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { 32 } 33 }