玩转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
- 玩转android之Action bar
- Android开发入门之添加Action BAR
- Android之Action Bar高仿微信主界面设计
- Android开发之Action Bar详解
- Android 自定义title 之Action Bar
- Android UI开发之Action Bar
- Action Bar for Android
- Action Bar for Android
- Android Fragment & Action Bar
- android action bar progress
- Android Action Bar
- Android UI--Action Bar
- Android Action Bar
- Action Bar of Android
- android 去除title bar 标题栏 action bar
- Android开发入门之Action Bar用户交互
- [翻译]Action Bar for Android
- Android平台的Action Bar
- never need to draw
- 贵圈真乱!反腐扩至文艺圈人士,文艺圈与官场关系有多乱?
- Openwrt Luci界面开发
- Arcgis SDE linux 安装
- 左式堆的实现与详解
- 玩转android之Action bar
- jquery - 使用jquery生成二维码
- C语言精髓:最大公约数
- 软件工程大作业---《苕皮段子》段子笑话APP(转载)
- 马云吐槽京东大悲剧事件始末 阿里真的无人能敌吗?
- 今日万达院线002739申购指南-万达院线002739如何申购
- 银行贷款需要满足什么条件 各银行经营性贷款细则汇总
- 油价调整最新消息-2015年全国油价最新价格查询
- 2015年哪种理财方式最好 怎么理财才能赚到钱-