1. 程式人生 > >Android 開發之為ActionBar 新增Actionbar Button

Android 開發之為ActionBar 新增Actionbar Button

前幾天做App 的時候,做的比較倉促,就沒有新增返回按鈕,還有就是MainActivity 的Theme 怎麼傳遞到其他Activity 中,今天無意中看到官方的Train,所以就記下來啦,順便吧ActionBar,Menu 也複習複習;

新增Action Buttons

首先我們要建立menu 檔案,我們可以為頂部新增Menu,showAsAction 是顯示的型別,ifRoom 會自動匹配是否有實體鍵,always 是一直隱藏,但是使用Support Libraryandroid:showAsAction="ifRoom" 會提示錯誤,所以在menu 中新增xmlns:app="http://schemas.android.com/apk/res-auto"

屬性,改為app:showAsAction="ifRoom" 就沒有錯誤;

res/menu/main_activity_actions.xml

xml<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- Search, should appear as action button -->
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          android:showAsAction="ifRoom" />
    <!-- Settings, should always be in the overflow -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          android:showAsAction="never" />
</menu>

新增ActionBar

java@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

為Action Button 新增響應事件

java@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    //當點選不同的menu item 是執行不同的操作
    switch (id) {
        case R.id.action_search:
            openSearch();
            break;
        case R.id.action_settings:
            openSettings();
            break;
        default:
            break;
    }
    return super.onOptionsItemSelected(item);
}

為ActionBar 頂部新增返回按鈕

首先要在AndroidManifest 檔案中配置

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

然後在onCrate 中設定

java@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_displaymessage);
    // 3.0+ 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    // If your minSdkVersion is 11 or higher, instead use:
    // getActionBar().setDisplayHomeAsUpEnabled(true);
}

最後的效果圖

http://tikitoo.qiniudn.com/android_training_back_activity.png

為下一個Activity 傳遞MainActivity Theme

需要注意的是,setTheme 方法在setContentView 之前;其實就是利用Intent 將Theme 傳遞到下一個Activity;

javapublic class MainActivity extends ActionBarActivity {

    public static int MAIN_THEME_STYLE_ID = R.style.Theme_AppCompat_Light;
    public static String MAIN_THEME_STYLE = "Theme_AppCompat_Light";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setTheme(R.style.Theme_AppCompat_Light);
        setContentView(R.layout.activity_main);
    }

    public void onToBackActivity(View view) {
        Intent intent = new Intent(this, BackActivity.class);
        intent.putExtra(MAIN_THEME_STYLE, MAIN_THEME_STYLE_ID);
        startActivity(intent);
    }
}

在下一個Activity 獲取Theme

javapublic class BackActivity extends ActionBarActivity {
    int style_id;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getMainIntent();
        setTheme(style_id);
        setContentView(R.layout.activity_back);

        getSupportActionBar().setDisplayShowCustomEnabled(true);

    }
    void getMainIntent() {
        Intent intent = getIntent();
        style_id = intent.getIntExtra(MainActivity.MAIN_THEME_STYLE, 0);

    }
}

原文地址

  • Android 學習為ActionBar 新增返回按鈕 · Issue #29 · Tikitoo/blog

  • 轉載請註明出處