什麼是 Up Action?

Up Action的主要功能是返回其parent activity,使用方式相當簡單只有2個步驟。
1.在AndroidManifest.xml中指定其parent activity
2.在Activity的onCreate取得Action Bar物件並呼叫Action Bar的setDisplayHomeAsUpEnabled(true)來啟動up action。
 

指定 Parent Activity

使用up action必須在AndroidManifest.xml中設定其parent activity是哪個Activity。
這可以透過android:parentActivityName 屬性來設定。
在android 4.1之後使用android:parentActivityName,而android 4.1 之前的版本使用<meta-data>。
如下BasicActionActivity 是 UpActionActivity 的 parent activity
/app/src/main/res/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.codefoxx.toolbarexample">
  <application
...
    <activity
      android:name=".basicaction.UpActionActivity"
      android:parentActivityName=".basicaction.BasicActionActivity">
      <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.codefoxx.toolbarexample.basicaction.BasicActionActivity"
        />
    </activity>
    <activity android:name=".basicaction.BasicActionActivity">
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
    </activity>
...

 

啟動 Up Action

可以透過呼叫App Bar的setDisplayHomeAsUpEnabled()方法來啟動Up Action。
一般而言會在Activity建立時呼叫setDisplayHomeAsUpEnabled
如onCreate方法。如下

public class UpActionActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_up_action);
    Toolbar toolBar = findViewById(R.id.app_toolbar);
    setSupportActionBar(toolBar);
    ActionBar supportActionBar = getSupportActionBar();
    supportActionBar.setDisplayHomeAsUpEnabled(true);
  }
}

注意
1.不需要在onOptionitemSelected方法內實作up button的動作,因為up button的動作就是返回其parent activity,不需要另外實作。
2.點擊up action時,要返回的parent activity必須已存在於工作棧中,若不存在則會直接關閉目前的Activity。

完整程式碼如下
/app/activity_up_action.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context=".basicaction.UpActionActivity">
  <include
    android:id="@+id/app_toolbar"
    layout="@layout/toolbar_main"
    />
</androidx.constraintlayout.widget.ConstraintLayout>

/app/src/main/res/menu/toolbar_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="?attr/actionBarSize"
  android:background="?attr/colorPrimary"
  android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
</androidx.appcompat.widget.Toolbar>

以上為加入Up Action 到 App Bar的範例。
 
以下為App Bar的相關內容。
http://34.80.81.192/?p=6149
http://34.80.81.192/?p=6165
http://34.80.81.192/?p=6192