編輯:關於Android編程
玩轉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; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 顯示ActionBar ActionBar actionBar = getActionBar(); actionBar.show(); // 顯示擴展menu getOverflowMenu(); // 顯示DropDownList /** Create an array adapter to populate dropdownlist */ ArrayAdapteradapter = new ArrayAdapter ( 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 */ @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. // 加載 Menu MenuInflater 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 選擇事件 */ @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (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 { @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); } }; }
生成的Android應用APK文件最好進行優化,因為APK包的本質是一個zip壓縮文檔,經過優化
原型的是一種創建的設計模式,主用來創建的復雜的對象和構建耗時的實例。通過克隆已有的對象來創建的新的對象,從而節省時間和內存。原型的模式介紹原型模式的uml圖 -
初學opengl ES,每一個教你在屏幕上貼圖的opengl版hello world都有這麼兩數組: static final float COORD[] = {
MainActivity.java代碼:package siso.multilistview;import android.os.Build;import android