玩转android之Action bar

来源:互联网 发布:切片软件手机 编辑:程序博客网 时间:2024/06/05 22:42

玩转android之Action bar 


背景:

在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果。


常用属性:

1.showAsAction:

当你的应用程序目标设为蜂巢平台时,你可以利用Action Bar部件提供的全部功能,将你的选项菜单项放在Action Bar的右上角,对用户来说使用更方便,控制该行为的主菜单项属性是android:showAsAction。
  这个属性可接受的值有:
  1、always:这个值会使菜单项一直显示在Action Bar上。
  2、ifRoom:如果有足够的空间,这个值会使菜单项显示在Action Bar上。
  3、never:这个值使菜单项永远都不出现在Action Bar上。
  4、withText:这个值使菜单项和它的图标,菜单文本一起显示。


常用功能:搜索、分享、刷新、下拉列表、更多

目标:







实现:

MainActivity.java

package com.hitwh.readscarf;import java.lang.reflect.Field;import android.app.ActionBar;import android.app.ActionBar.OnNavigationListener;import android.app.Activity;import android.content.Intent;import android.os.AsyncTask;import android.os.Bundle;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.ViewConfiguration;import android.widget.ArrayAdapter;import android.widget.ShareActionProvider;import android.widget.Toast;public class MainActivity extends Activity {      private String[] actions = new String[] { "Action-1", "Action-2", "Action-3" };      private MenuItem menuItem = null; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 显示ActionBarActionBar actionBar = getActionBar();actionBar.show();// 显示扩展menugetOverflowMenu();// 显示DropDownList/** Create an array adapter to populate dropdownlist */          ArrayAdapter<String> adapter = new ArrayAdapter<String>(                  getBaseContext(),                  android.R.layout.simple_spinner_dropdown_item, actions);          /** Enabling dropdown list navigation for the action bar */          actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);           /** Setting dropdown items and item navigation listener for the actionbar */          actionBar.setListNavigationCallbacks(adapter, navigationListener);        } /**  * 默认 Navigation listener  **/      ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() {          @Override          public boolean onNavigationItemSelected(int itemPosition,                  long itemId) {              Toast.makeText(getBaseContext(),                      "You selected : " + actions[itemPosition],                      Toast.LENGTH_SHORT).show();              return false;          }      };     /**     * 创建 Menu      */@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.// 加载  MenuMenuInflater inflater = getMenuInflater();        inflater.inflate(R.menu.main, menu);                // 加载分享menu        ShareActionProvider provider = (ShareActionProvider) menu.findItem(R.id.share).getActionProvider();          // 初始化 Share Intent         Intent intent = new Intent(Intent.ACTION_SEND);          intent.setType("text/plain");          intent.putExtra(Intent.EXTRA_TEXT, "Text I want to share");          provider.setShareIntent(intent);                  return true;}/** * Menu 选择事件 */@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubswitch (item.getItemId()) { // 刷新menu        case R.id.refresh:              menuItem = item;              menuItem.setActionView(R.layout.progressbar);              TestTask task = new TestTask();              task.execute("test");              break;          // 保存menu        case R.id.save:              Toast.makeText(this, "Menu Item save selected", Toast.LENGTH_SHORT).show();              break;        // 搜索menu        case R.id.search:        Toast.makeText(this, "Menu Item search selected", Toast.LENGTH_SHORT).show();        break;        // 分享menu        case R.id.share:        Toast.makeText(this, "Menu Item share selected", Toast.LENGTH_SHORT).show();        break;        default:              break;          }          return super.onOptionsItemSelected(item); }/** * 显示更多菜单 */private void getOverflowMenu() {      try {        ViewConfiguration config = ViewConfiguration.get(this);        Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");        if(menuKeyField != null) {            menuKeyField.setAccessible(true);            menuKeyField.setBoolean(config, false);        }    } catch (Exception e) {        e.printStackTrace();    }}/** * 显示加载进度条 * @author Mr-rxz * */private class TestTask extends AsyncTask<String, Void, String> {            @Override          protected String doInBackground(String... params) {              // Simulate something long running              try {                  Thread.sleep(5000);              } catch (InterruptedException e) {                  e.printStackTrace();              }              return null;          }            @Override          protected void onPostExecute(String result) {          // 这个方法需要 API 14 以上             menuItem.collapseActionView();              menuItem.setActionView(null);          }      };  }

menu/main.xml

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" >    <item        android:id="@+id/save"        android:showAsAction="collapseActionView"        android:title="save"/>    <item        android:id="@+id/refresh"        android:orderInCategory="2"        android:showAsAction="always"        android:icon="@android:drawable/ic_popup_sync"        android:title="refresh"/>    <item        android:id="@+id/search"        android:orderInCategory="1"        android:actionViewClass="android.widget.SearchView"        android:icon="@android:drawable/ic_menu_search"        android:showAsAction="ifRoom|collapseActionView"        android:title="search"/>         <item          android:id="@+id/share"          android:actionProviderClass="android.widget.ShareActionProvider"          android:showAsAction="collapseActionView"        android:title="Share"/></menu>




0 0
原创粉丝点击