使ActionBar(Toolbar)的Up導航和實體按鍵Back實現同步

#前言html

android的toolbar的返回鍵有必要存在嗎? google自家應用也保留了toolbar的返回鍵。 以爲和下方的實體返回鍵重了。java

無論什麼緣由大衆的使用習慣就是這樣, 因此呢在開發過程當中就會有了toolbar的返回和實體返回鍵都要實現的問題 並且要基本功能相同,這就有了功能同步的問題。android

  • 官方中把Toolbar中的那個返回鍵不叫作返回鍵 ,而叫作Up功能是返回該app的邏輯層級的上一層,即parentActivity。 詳細見Navigation with Back and Upapp

  • 返回back stack的上一個activity。 #實現 要想ActionBar或者Toolbar顯示出home來須要調用以下代碼ide

setSupportActionBar(toolbar);
//這裏提示可能會報出異常具體見下圖
getSupportActionBar().setHomeButtonEnabled(true);
//設置toolbar後調用setDisplayHomeAsUpEnabled
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

異常提示

  • setHomeButtonEnabled這個小於4.0版本的默認值爲true的。可是在4.0及其以上是false, 該方法的做用:決定左上角的圖標是否能夠點擊。沒有向左的小圖標。 true 圖標能夠點擊 false 不能夠點擊。
  • setDisplayHomeAsUpEnabled(true) 給左上角圖標的左邊加上一個返回的圖標 。對應ActionBar.DISPLAY_HOME_AS_UP
  • setDisplayShowHomeEnabled(true)
    使左上角圖標是否顯示,若是設成false,則沒有程序圖標,僅僅就個標題,不然,顯示應用程序圖標,對應id爲android.R.id.home,對應ActionBar.DISPLAY_SHOW_HOME
  • setDisplayShowCustomEnabled(true) 使自定義的普通View能在title欄顯示,即actionBar.setCustomView能起做用,對應ActionBar.DISPLAY_SHOW_CUSTOM
  • setDisplayShowTitleEnabled(true)
    對應ActionBar.DISPLAY_SHOW_TITLE

其中setHomeButtonEnabledsetDisplayShowHomeEnabled共同起做用,若是setHomeButtonEnabled設成false,即便setDisplayShowHomeEnabled設成true,圖標也不能點擊this

接着配置AndroidManifest.xml 在Android 4.1上,只須要聲明該activity的parentActivity便可。 在Android 4.0及以前的版本上,須要include Support Library,而後添加相應的<meta-data>google

<application ... >  
    ...  
    <!-- The main/home activity (it has no parent activity) -->  
    <activity  
        android:name="com.example.MainActivity" ...>  
        ...  
    </activity>  
    <!-- A child of the main activity -->  
    <activity  
        android:name="com.example.ActivityB"  
        android:parentActivityName="com.example.MainActivity" >  
        <!-- Parent activity meta-data to support 4.0 and lower -->  
        <meta-data  
            android:name="android.support.PARENT_ACTIVITY"  
            android:value="com.example.MainActivity" />  
    </activity>  
</application>

接下來在代碼中直接使用以下的的方法就能夠了code

  • ActionBar的Up 這段在配置文件中配置了能夠不用
@Override  
	public boolean onOptionsItemSelected(MenuItem item) {  
		switch (item.getItemId()) {  
			// Respond to the action bar's Up/Home button  
			case android.R.id.home:  
			NavUtils.navigateUpFromSameTask(this);  
			return true;  
		}  
		return super.onOptionsItemSelected(item);  
	}
  • 返回鍵調用的
@Override
    public void onBackPressed() {
        NavUtils.navigateUpFromSameTask(this);
        super.onBackPressed();
    }

#參考資料xml

相關文章
相關標籤/搜索