標籤:
一、ActionBar介紹
ActionBar是位於Activity頂部,用於顯示Activity的表徵圖,標題,以及菜單的。可用於導航等功能,廣泛應用於View的互動。ActionBar可分為三部分,分別是第一Icon、第二Item、第三overflow按鈕。
二、如何添加ActionBar。(ActionBar 是在Android 3.0(API 11)中加入到SK中的,想在低版本中使用ActionBar使用Support Library v7。)
1、建立activity繼承自AppCompatActivty.
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }} 2、實現Theme.AppCompat.Light.DarkActionBar主題
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
style檔案主題配置。
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style></resources>
3、下面為大家圖解一下theme主題設定檔中的樣式都有哪些,前人總結的。
4、最終如下
三、移除ActionBar。
1、修改theme主題
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">#55A028</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
2、代碼中修改。
package com.example.cdy.actionbardemo;import android.support.v7.app.ActionBar;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //得到actionBar,注意我的是V7包,使用getSupportActionBar() ActionBar actionBar = getSupportActionBar(); //隱藏actionBar actionBar.hide(); }}四、修改actionBar的樣式
1、修改ActionBar的表徵圖。
ActionBar的標題預設是繼承了Applicition和Activity的lable屬性,所以只需要修改activity的lable屬性即可。值得一提的是,老的版本中修改icon也是預設繼承自logo屬性,但是發現前段時間更新之後就無法顯示了,需要代碼中設定。
<activity android:name=".MainActivity" android:label="@string/actionBar_title"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //得到actionBar,注意我的是V7包,使用getSupportActionBar() ActionBar actionBar = getSupportActionBar(); //在使用v7包的時候顯示icon和標題需指定一下屬性。 actionBar.setDisplayShowHomeEnabled(true); actionBar.setLogo(R.mipmap.back_black); actionBar.setDisplayUseLogoEnabled(true); setContentView(R.layout.activity_main); } 2、
五、添加item和overfloy。
1、把所有的action item定義在menu的資源檔中。showAsAction(此item如何顯示在actionBar上) icon(表徵圖) title(標題)。showAsAction屬性,never不顯示在actionBar上,ifRoom如果有空間就顯示,沒空間就顯示在overflow上,always只顯示在actionbar上。
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_delete" android:orderInCategory="100" app:showAsAction="never" android:icon="@mipmap/ic_launcher" android:title="刪除"/> <item android:id="@+id/action_add" android:orderInCategory="100" app:showAsAction="ifRoom" android:icon="@mipmap/ic_launcher" android:title="添加"/> <item android:id="@+id/action_select" android:orderInCategory="100" app:showAsAction="always" android:icon="@mipmap/ic_launcher" android:title="選擇"/></menu>
2、在activity中引用資源檔。
package com.example.cdy.actionbardemo;import android.support.v7.app.ActionBar;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.widget.Toast;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //得到actionBar,注意我的是V7包,使用getSupportActionBar() ActionBar actionBar = getSupportActionBar(); //在使用v7包的時候顯示icon和標題需指定一下屬性。 actionBar.setDisplayShowHomeEnabled(true); actionBar.setLogo(R.mipmap.back_black); actionBar.setDisplayUseLogoEnabled(true); setContentView(R.layout.activity_main); } /** * @param menu * @return * 使用菜單 */ @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.actionbar_menu, menu); return super.onCreateOptionsMenu(menu); } /** * @param item * @return * item的點擊事件 */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // action with ID action_refresh was selected case R.id.action_delete: Toast.makeText(this, "刪除", Toast.LENGTH_SHORT).show(); break; // action with ID action_settings was selected case R.id.action_add: Toast.makeText(this, "添加", Toast.LENGTH_SHORT).show(); break; case R.id.action_select: Toast.makeText(this, "選擇", Toast.LENGTH_SHORT).show(); break; default: break; } return super.onOptionsItemSelected(item); }}3、效果
六、使用自訂的view添加到actionBar上。
1、自訂layout_actionbar.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" android:paddingLeft="10dp" android:paddingRight="10dp" > <ImageButton android:id="@+id/left_imbt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:background="@mipmap/back_black" /> <TextView android:id="@+id/bar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:textColor="#FFFFFFFF" android:textSize="18sp" android:text="標題" /> <!-- actionbar 右邊按鈕 --> <TextView android:id="@+id/right_bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:textSize="18sp" android:background="@null" /></RelativeLayout>
2、在activity中引用,並且得到控制項
package com.example.cdy.actionbardemo;import android.graphics.Color;import android.support.v7.app.ActionBar;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends AppCompatActivity { //聲明控制項 TextView bar_title; TextView right_bt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //得到actionBar,注意我的是V7包,使用getSupportActionBar() ActionBar actionBar = getSupportActionBar(); //在使用v7包的時候顯示icon和標題需指定一下屬性。 actionBar.setDisplayShowHomeEnabled(true); //actionBar.setLogo(R.mipmap.back_black); actionBar.setDisplayUseLogoEnabled(true); // 返回箭頭(預設不顯示) actionBar.setDisplayHomeAsUpEnabled(false); // 左側表徵圖點擊事件使能 actionBar.setHomeButtonEnabled(true); //顯示自訂的actionBar actionBar.setDisplayShowCustomEnabled(true); View actionbarLayout = LayoutInflater.from(this).inflate(R.layout.layout_actionbar, null); actionBar.setCustomView(actionbarLayout); bar_title = (TextView)actionbarLayout.findViewById(R.id.bar_title); right_bt = (TextView)actionbarLayout.findViewById(R.id.right_bt); bar_title.setText("我的工作"); right_bt.setText("篩選"); bar_title.setTextColor(Color.WHITE); right_bt.setTextColor(Color.WHITE); setContentView(R.layout.activity_main); } /** * @param menu * @return * 使用菜單 */ @Override public boolean onCreateOptionsMenu(Menu menu) { return super.onCreateOptionsMenu(menu); } /** * @param item * @return * item的點擊事件 */ @Override public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); }}3、效果
ActivityBar的使用大致就介紹到這來,ActivityBar中還有很多的使用方法,和特殊的效果需要我們事先。大家可以好好研究一下。歡迎指正和轉載
android ActionBar用法詳解