Android 自定义标题栏(title栏) .

来源:互联网 发布:mac 照片储存在哪里 编辑:程序博客网 时间:2024/05/16 04:46

近日

需要在android的标题栏上添加按钮,所以对android的标题栏进行了一下简单的研究~


第一步,向实现自定义标题栏,需要在onCreate方法里这样写


[java] view plaincopyprint?
  1. requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);  
  2.   
  3. setContentView(R.layout.main);  
  4. getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);  

注意:

requestWindowFeature要在setContentView之前

getWindow().setFeatureInit最好在setContentView之后


第二步,就是写好自己的布局文件,实现标题栏的自定义。

不过我们会遇到一些问题,就是标题栏的高度不能自定义~下面就是解决办法~



下面,我们看一下android title标题栏 在源码 framework中的XML文件


screen_custom_title.xml

[html] view plaincopyprint?
  1. <LinearLayout android:orientation="vertical" android:fitsSystemWindows="true">  
  2. <FrameLayout android:id="@android:id/title_container"   
  3.              android:layout_width="match_parent"   
  4.              android:layout_height="?android:attr/windowTitleSize"   
  5.              style="?android:attr/windowTitleBackgroundStyle">  
  6.     </FrameLayout>  
  7. <FrameLayout android:id="@android:id/content"   
  8.              android:layout_width="match_parent"   
  9.              android:layout_height="0dip"   
  10.              android:layout_weight="1"   
  11.              android:foregroundGravity="fill_horizontal|top"   
  12.              android:foreground="?android:attr/windowContentOverlay"/>  
  13. </LinearLayout>  

screen_title.xml

[html] view plaincopyprint?
  1. <LinearLayout android:orientation="vertical" android:fitsSystemWindows="true">  
  2. −  
  3. <FrameLayout android:layout_width="match_parent"   
  4.              android:layout_height="?android:attr/windowTitleSize"   
  5.              style="?android:attr/windowTitleBackgroundStyle">  
  6. <TextView android:id="@android:id/title"   
  7.           style="?android:attr/windowTitleStyle"   
  8.           android:background="@null"   
  9.           android:fadingEdge="horizontal"   
  10.           android:gravity="center_vertical"   
  11.           android:layout_width="match_parent"   
  12.           android:layout_height="match_parent"/>  
  13. </FrameLayout>  
  14. <FrameLayout android:id="@android:id/content"   
  15.              android:layout_width="match_parent"   
  16.              android:layout_height="0dip"   
  17.              android:layout_weight="1"   
  18.              android:foregroundGravity="fill_horizontal|top"   
  19.              android:foreground="?android:attr/windowContentOverlay"/>  
  20. </LinearLayout>  


       既然是自定义标题,那我们就看screen_custom_title.xml,里面有一个title_container和一个content,组合成了标题栏,我们自定义标题所给出的view,都被content作为子view了,影响不了那个title_container和content,所以,任你怎么弄,它该留白的还是留白,你没招。
       看title_container有个style是这样的:

        style="?android:attr/windowTitleBackgroundStyle"
      

         content的foreground是这样的android:foreground="?android:attr/windowContentOverlay"


       我们可以自己写一个style

[html] view plaincopyprint?
  1. <resources xmlns:android="http://schemas.android.com/apk/res/android">  
  2.   
  3.   
  4. <style name="CustomWindowTitleBackground">  
  5.        <item name="android:background">#00cc00</item>  
  6. </style>  
  7.   
  8.   
  9. <style name="test" parent="android:Theme">  
  10.      <item name="android:windowTitleSize">50dp</item>  
  11.      <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>  
  12. </style>  
  13. </resources>  

加入到AndroidManifest


[html] view plaincopyprint?
  1.         <activity android:name=".CustomTitileBarActivity"  
  2.                   android:label="@string/app_name" android:theme="@style/title_bar">  
  3.             <intent-filter>  
  4.                 <action android:name="android.intent.action.MAIN" />  
  5.                 <category android:name="android.intent.category.LAUNCHER" />  
  6.             </intent-filter>  
  7.         </activity>  






PS:做的略显粗糙,不过以能实现功能为主~~