1. 程式人生 > >Pro Android學習筆記 ActionBar(1):Home圖標區

Pro Android學習筆記 ActionBar(1):Home圖標區

ces tom 新的 方便 find rac vertica lba manifest

??

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);

//不顯示箭頭符號,同意通過onOptionsItemSelected()進行箭頭。但一般的情況下。還是應該給個箭頭提示給用戶。
}

@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圖標區