Android 自訂Activity的標題列(Titlebar)

來源:互聯網
上載者:User

標籤:

  預設的情況下,通常見到Activity的標題列(Titlebar)是這樣的(紅色框內):

HandleContacts是Activity的標題。
有時候,我們希望能改變一下這樣單調的狀況。比如,要在標題列中增加一個用於美化介面的表徵圖、增一個輸入框或按鈕之類的,怎樣才能做到這一點呢?我們不妨來看一個實際的例子。

1.首先如下建立一個Android項目

 

2.將圖片magnifier.png拖入該項目的res/drawable-mdpi檔案夾下。magnifier.png圖片的樣子是這樣的:

 

3.在該項目的res/layout檔案夾下,建立一個布局titlebar.xml,這個布局將用於定製Activity的標題列

編輯titlebar.xml,使其內容如下:

 

<?xmlversion="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/magnifier"
android:gravity="bottom"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="38dip"
android:text="@string/app_name"
android:textColor="#FFFFFFFF"
android:textSize="14dip"
android:paddingTop="1dip"
/>
<EditText
android:id="@+id/searchparameter"
android:layout_width="wrap_content"
android:layout_height="38dip"
android:text="ABCDEFGHIJ"
android:textSize="14dip"
android:layout_margin="1dip"
/>
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="38dip"
android:text="OK"
android:textSize="14dip"
/>
</LinearLayout>

 

在上面的LinearLayout中,增加了以下控制項:

一個ImageView,用於顯示一個表徵圖

一個TextView,用於顯示應用的名稱

一個EditText,用於接收輸入

一個Button,用於測試

 

4.修改CustomizeTitlebar.java,使之如下:

 

public class CustomizeTitlebar extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);
}
}

以上加粗的兩行很重要,而且必須要嚴格按照上面那樣的順序出現在代碼中。即:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);必須出現在super.onCreate(savedInstanceState);之後,setContentView(R.layout.main);之前。其意思就是告訴系統,本程式要自己定義Titlebar;

getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.titlebar); 則必須出現在setContentView之後,其意思就是告訴系統,自訂的布局是R.layout.titlebar(即,我們前面編寫的titlebar.xml)

到這裡,不妨來運行一下,看看結果如何:

 

我們看到,Titlebar基本上按照我們的意思進行了改變,但也存在著一個缺陷:Titlebar太窄了,那麼怎樣改變Titlebar的高度呢?

 

5. 要改變Titlebar的高度,我們得先建立styles.xml(目錄一般在/res/values/下),編輯styles.xml,使其內容如下:

<?xmlversion="1.0" encoding="utf-8"?>
<resources>
<style name="titlebarstyle"parent="android:Theme">
<item name="android:windowTitleSize">38dip</item>
</style>
</resources>

上面<item name="android:windowTitleSize">39dip</item>這一句,就是用來設定Titlebar的高度的。

 

6.在上面的基礎上,我們需要修改AndroidManifest.xml中,相應Activity的屬性。如下:

 

<?xmlversion="1.0" encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.pat.customizetitlebar"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon"android:label="@string/app_name">
<activity android:name=".CustomizeTitlebar"
android:label="@string/app_name"
android:theme="@style/titlebarstyle">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="8"/>
</manifest>

注意粗體字是新增上去的,其中的titlebar是在第5步中增加的。現在來看看運行結果:

可以看到結果完全符合了我們的要求。

 

7.我們還可以改變Titlebar的背景顏色。為此我們修改前面的styles.xml,使之如下:

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomizedWindowTitleBackgroundColor">
<item name="android:background">#047BF0</item>
</style>
<style name="titlebarstyle" parent="android:Theme">
<item name="android:windowTitleSize">38dip</item>
<item name="android:windowTitleBackgroundStyle">@style/CustomizedWindowTitleBackgroundColor</item>
</style>
</resources>

注意,其中的粗體字是新增加的。

項目其他檔案,均無需變動。運行結果如下:

 

8.最後,我們以OK按鈕為例來測試Titlebar上的控制項的事件響應。為此,修改CustomizeTitlebar.java,使之如下:

 1 public class CustomizeTitlebar extends Activity implements OnClickListener 2 { 3  private Button button; 4     @Override 5     public void onCreate(Bundle savedInstanceState) 6     { 7        super.onCreate(savedInstanceState); 8        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 9        setContentView(R.layout.main);10        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebar);11        button = (Button)findViewById(R.id.button);12  button.setOnClickListener(this);13  } 14  public voidonClick(View v)15  {16  if(v.getId() == R.id.button)17  {18  Toast.makeText(this, "OK button in Titlebar clicked...", Toast.LENGTH_LONG).show();19  }20  }21 }

 

粗體字部分是新增加的代碼。重新運行本項目,等介面出來後,點擊Titlebar上的OK按鈕,將出現:

 

這說明,Titlebar上自己增加上去的控制項,可以很好地響應相關的事件。

 

 

來源: http://blog.csdn.net/pathuang68/article/details/6646792

Android 自訂Activity的標題列(Titlebar)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.