編輯:關於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 */
ArrayAdapter adapter = 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 Zipalign工具優化Android APK應用
生成的Android應用APK文件最好進行優化,因為APK包的本質是一個zip壓縮文檔,經過優化
Android 原型模式
原型的是一種創建的設計模式,主用來創建的復雜的對象和構建耗時的實例。通過克隆已有的對象來創建的新的對象,從而節省時間和內存。原型的模式介紹原型模式的uml圖 -
對Android opengl ES世界坐標系和紋理坐標系的理解
初學opengl ES,每一個教你在屏幕上貼圖的opengl版hello world都有這麼兩數組: static final float COORD[] = {
安卓Andriod使用入門(九)【懸浮窗菜單】
MainActivity.java代碼:package siso.multilistview;import android.os.Build;import android