Android 開發之為ActionBar 新增Actionbar Button
阿新 • • 發佈:2019-02-09
前幾天做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); }
最後的效果圖
為下一個Activity 傳遞MainActivity Theme
需要注意的是,setTheme
方法在setContentView
之前;其實就是利用Intent 將Theme 傳遞到下一個Activity;
java
public 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
java
public 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
-
轉載請
註明出處