1. 程式人生 > >如何自定義ActionBar顯示標題在中間位置

如何自定義ActionBar顯示標題在中間位置

     在Android3.0以後就開始引入了ActionBar了,這篇重點記錄如何自定義ActionBar讓標題顯示在中間的位置。雖然android手機有自帶的返回鍵,不過當今很多應用還是新增actionbar顯示標題在中間,在左側加入一個返回按鈕。

    新增一個ActionBar很簡單,在AndroidManifest.xml檔案中指定Application或者Activity的theme為Theme.Holo或其子類即可。新增完ActionBar後,要實現題目所述功能,首先需要自定義你自己需要的標題檔案佈局,這裡,我給出一個示例(action_bar_title):

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ff0000">
    
    <ImageButton 
        android:id="@+id/image_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/fh"
        android:layout_marginLeft="12dp"
        android:gravity="center"
        android:layout_gravity="left|center"
        />
    
    <TextView 
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="標題"
        android:gravity="center"
        android:background="#ff0000"
        android:layout_gravity="center"
        android:textSize="20sp"
        />
    
</FrameLayout>

接下來就可以在activity中直接實現需求:

package com.example.actionbar;

import android.app.ActionBar;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageButton;
import android.widget.Toast;

public class MainActivity extends Activity{

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		ActionBar actionBar = getActionBar();
		actionBar.setDisplayHomeAsUpEnabled(true);
		
		ActionBar.LayoutParams lp =new ActionBar.LayoutParams(
		          ActionBar.LayoutParams.MATCH_PARENT,
		          ActionBar.LayoutParams.MATCH_PARENT,
		          Gravity.CENTER);
		LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		View titleView = inflater.inflate(R.layout.action_bar_title, null);
		actionBar.setCustomView(titleView, lp);
		
		actionBar.setDisplayShowHomeEnabled(false);//去掉導航
		actionBar.setDisplayShowTitleEnabled(false);//去掉標題
		actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
		actionBar.setDisplayShowCustomEnabled(true);
		
		ImageButton imageBtn = (ImageButton) actionBar.getCustomView().findViewById(R.id.image_btn);
		
		imageBtn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Toast.makeText(MainActivity.this, "返回", Toast.LENGTH_SHORT).show();
			}
		});
	}
}

在activity中通過ActionBar actionBar = getActionBar();獲得ActionBar例項,然後通過actionBar.setCustomView(titleView, lp);設定自己定義的標題佈局。