Pro Android學習筆記 ActionBar(1):Home圖標區
Pro Android學習筆記(四八):ActionBar(1):Home圖標區
2013年03月10日 ? 綜合 ? 共 3256字 ? 字號 小 中 大 ? 評論關閉ActionBar在Android 3.0 SDK中為平板引入,在4.0中也能夠在phone中使用。在title中提供類似tab和菜單的效果,有三種形式:Tabbed action bar,list action bar和standard action bar,我們將在小樣例中進行示範。
Home Icon
在Action Bar的最左邊,就是Home icon和標題的區域,如上圖紅圈內。在Home icon的左邊有一個返回的的左箭頭,通常我們點擊這個區域,將回到應用的主activity中。圖中的activity是通過主activity的菜單觸發。之前已經多次使用,不在反復。activity的layout非常easy,僅僅有一個textview在LinearLayout中,其代碼
源碼
public class HomePressTestCase1 extends Activity{
private TextView tv = null;
private ActionBar bar = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.basic_test);
tv = (TextView)findViewById(R.id.textViewId);
tv.setMovementMethod(ScrollingMovementMethod.getInstance());//設置TextView內容過多時,能夠通過鼠標進行滾動
tv.setText("");
//在android 4.0後。缺省是不監聽Home icon動作。要有效使用。必須進行以下的設置
bar = getActionBar(); //獲取ActionBar的對象,從這種方法也可知action bar是activity的一個屬性
bar.setDisplayHomeAsUpEnabled(true);
//顯示返回的箭頭,並可通過onOptionsItemSelected()進行監聽。其資源ID為android.R.id.home。
// bar.setHomeButtonEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case android.R.id.home:
//對用戶按home icon的處理,本例僅僅需關閉activity。就可返回上一activity,即主activity。
showInfo("Home is press");
finish();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
protected void showInfo(String s){
tv.setText(s + "\n" + tv.getText());
Log.d(getLocalClassName(),s);
}
}
TextView的滾動
我們能夠將整個layout設置為ScrollView。可是TextView本身能夠設置滾動,在xml中相關的屬性例如以下。並在代碼中通過setMovementMethod(ScrollingMovementMethod.getInstance() )使之有效。
<TextView android:id="@+id/textViewId" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="vertical" android:scrollbarStyle="insideOverlay" android:scrollbarSize="25dip" android:scrollbarFadeDuration="0" />
返回主activity或指定activity
假設上一activity並不是主activity。而我們有希望直接返回主activity,能夠例如以下處理:
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case android.R.id.home:
showInfo("Home is pressed");
Intent i = new Intent(this,MainActivity.class);
//【對於FLAG_ACTIVITY_CLEAR_TOP】:如果眼下activity的task堆棧是 MainActivity –> A –> B –> 當前Activity(如果我們按返回鍵,則依次返回B,A,最後為MainActivity。如今intent要喚起MainActivity。發如今堆棧存在,則將其及之前的所有清楚。在喚起新的activity後,task堆棧為MainActivity。註意,通過跟蹤activity的對象,將產生一個新的MainActivity的實例。不是原來的,原來的已經被幹掉。又比如當前為C—>
M—>A—>B—>當前,假設打開M,則運行後。推展為C—>M。
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
在Android 4.1之後(API Level 16),有更方便的處理方式,在AndroidManifest.xml中設置返回的activity就可以。xml的片段例如以下:
<activity android:name=".HomePressTestCase1" android:label="@string/test_case_1_home"
android:parentActivityName="cn.wei.flowingflying.pro.MainActivity" />
我們僅僅需設置parentActivityName,用戶按Home icon區域。不須要人工代碼進行處理,就能夠實現上面通過設置flag的intent代碼的實現。
java代碼可進一步簡化:
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == android.R.id.home){
showInfo("Home is press");
}
return super.onOptionsItemSelected(item);
}
Pro Android學習筆記 ActionBar(1):Home圖標區