自定义Activity标题栏(Title bar)和窗体显示状态操作(requestWindowFeature()的应用)

简介:
1. 标题栏显示图标
public  void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

         requestWindowFeature(Window.FEATURE_LEFT_ICON);

        setContentView(R.layout.main);
     
         getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,
                        android.R.drawable.icon);

         // ...
}
但实际效果呢,我觉得不好看,和旁边的文字有相当距离!看看别人的图片的:

当然这个图标也可以通过自定义布局,使用ImageView来实现:
<? xml  version ="1.0"  encoding ="utf-8" ?>
< LinearLayout  xmlns:android ="http://schemas.android.com/apk/res/android"
         android:layout_width ="wrap_content"
         android:layout_height ="wrap_content"  >
     < ImageView  android:layout_width ="wrap_content"    
             android:layout_height ="wrap_content"    
             android:src ="@drawable/icon" />
     < TextView  android:id ="@+id/text"    
             android:layout_width ="wrap_content"    
             android:layout_height ="wrap_content"    
             android:layout_alignParentLeft ="true"    
             android:text ="文本"  />    
</ LinearLayout >
效果图:

2.自定义布局
看看我自定义的标题栏:
布局代码(titlebar.xml)
<? xml  version ="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"
>
         < TextView
                 android:text ="@string/app_name"
                 android:textColor ="#000"
                 android:paddingRight ="3.0dip"
                 android:layout_width ="wrap_content"
                 android:layout_height ="wrap_content" />
         < TextView
                 android:text ="@string/battery_text"
                 android:textColor ="#000"
                 android:paddingRight ="3.0dip"
                 android:layout_width ="wrap_content"
                 android:layout_height ="wrap_content" />
         < TextView
                 android:id ="@+id/battery_text"
                 android:textColor ="#00f"
                 android:layout_width ="wrap_content"
                 android:layout_height ="wrap_content" />
</ LinearLayout >

Java代码:
public  void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

         requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 

        setContentView(R.layout.main);

         //自定义标题栏
        mWindow = getWindow();
         mWindow.setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.titlebar);

        mBatteryText = (TextView)findViewById(R.id.battery_text);

        mBatteryInforeceiver =  new BroadcastReceiver(){

             @Override
              public  void onReceive(Context context, Intent intent) {
                      int level = intent.getIntExtra( "level", 0);
                      int scale = intent.getIntExtra( "scale", 1);
                     mBatteryText.setText(String.valueOf(( int)(level*100/scale))+ "%");
             }
             
        };
}
你还可以添加其他控件,而这些控件的获取和事件响应都是直接在activity里面完成。

3. 设置标题栏的背景色和高度
虽然我们可以通过自定义布局文件在标题栏加入一些控件,但是仍然不能改变标题栏的高度、背景色,要想达到这个目的,只能使用theme(主题)。
\res\values\style.xml:
<? xml  version ="1.0"  encoding ="utf-8" ?>
< resources >
         < style  name ="CustomWindowTitleBackground" >
                 < item  name ="android:background" >#47B2FF </ item >
         </ style >

         < style  name ="activityTitlebar"  parent ="android:Theme" >
                 < item  name ="android:windowTitleSize" >34dp </ item > <!--  高度 -->
                 < item  name ="android:windowTitleBackgroundStyle" >@style/CustomWindowTitleBackground </ item >    <!-- 背景色,需要调用前面的颜色设置 -->
         </ style >
</ resources >


窗体显示状态操作(requestWindowFeature()的应用)

首先介绍一个重要方法那就是requestWindowFeature(featrueId),它的功能是启用窗体的扩展特性。参数是Window类中定义的常量。
一、枚举常量
1.DEFAULT_FEATURES:系统默认状态,一般不需要指定
2.FEATURE_CONTEXT_MENU:启用ContextMenu,默认该项已启用,一般无需指定
3.FEATURE_CUSTOM_TITLE:自定义标题。当需要自定义标题时必须指定。如:标题是一个按钮时
4.FEATURE_INDETERMINATE_PROGRESS:不确定的进度
5.FEATURE_LEFT_ICON:标题栏左侧的图标
6.FEATURE_NO_TITLE:没标题
7.FEATURE_OPTIONS_PANEL:启用“选项面板”功能,默认已启用。
8.FEATURE_PROGRESS:进度指示器功能
9.FEATURE_RIGHT_ICON:标题栏右侧的图标

对于默认启用的和前面有介绍的就略去不提了。我们说比较常用的FEATURE_INDETERMINATE_PROGRESS和FEATURE_NO_TITLE。

FEATURE_INDETERMINATE_PROGRESS:表示一个进程正在运行
progress.xml
<? xml  version ="1.0"  encoding ="utf-8" ?>
< LinearLayout  xmlns:android ="http://schemas.android.com/apk/res/android"
     android:layout_width ="wrap_content"
     android:layout_height ="wrap_content" >
     < ProgressBar  android:id ="@+id/progress"
             android:layout_width ="wrap_content"
             android:layout_height ="wrap_content"     
             android:layout_gravity ="center_vertical"
             style ="?android:attr/progressBarStyleSmallTitle" >
     </ ProgressBar >
</ LinearLayout >

Java代码
public  void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        setContentView(R.layout.main);

        getWindow().setFeatureInt(Window.FEATURE_INDETERMINATE_PROGRESS, R.layout.progress);
        setProgressBarIndeterminateVisibility( true);  //适当时候set false来隐藏

         //...
}

标题进度条显示

FEATURE_NO_TITLE 就是不显示标题栏,某些时候全屏需要,但全屏不等于不显示标题栏,我尝试显示标题栏的同时全屏来去掉系统的状态栏:
Java代码
public  void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 

        setContentView(R.layout.main);

         //自定义标题栏
        mWindow = getWindow();
        mWindow.setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.titlebar);

         /* full screen */
        mWindow.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                        WindowManager.LayoutParams.FLAG_FULLSCREEN);

         // ...
}
所以真正实现全屏的是后面的那句话!

效果图

***********
本文部分内容摘录于《Android 应用程序窗体显示状态操作(requestWindowFeature()的应用)》 http://www.cnblogs.com/salam/archive/2010/11/30/1892143.html


本文转自 Icansoft 51CTO博客,原文链接: 
http://blog.51cto.com/android/636134
相关文章
|
9月前
|
小程序
小程序:picker-view选择器快速滚动,确认时,”值显示错误“
小程序:picker-view选择器快速滚动,确认时,”值显示错误“
92 0
|
iOS开发
iOS开发 - touchBegan事件判断点击的位置在View上还是在View的子View上
iOS开发 - touchBegan事件判断点击的位置在View上还是在View的子View上
236 0
iOS开发 - touchBegan事件判断点击的位置在View上还是在View的子View上
|
API
scroll-view回到顶部功能的实现
在我最近写的一个项目中就有这样的一个需求,即无限滚动卡片列表中实现回到顶部,与已往的返回顶部功能不同,因为是通过scroll-view来实现的无限列表滚动,所以返沪顶部需要依靠scroll-view的一些特定属性和api,下面我将带大家分析,实现这个功能。
402 1
scroll-view回到顶部功能的实现
C#编程-73:panel控件中显示子窗体
C#编程-73:panel控件中显示子窗体
138 0
|
小程序 前端开发 JavaScript
01day 动态绑定变量 导航组件 view text是否可以复制 button 上下滚动组件
01day 动态绑定变量 导航组件 view text是否可以复制 button 上下滚动组件
01day 动态绑定变量 导航组件 view text是否可以复制 button 上下滚动组件
|
小程序 JavaScript
小程序自定义底部导航栏,切换不同页面显示不同tabBar
小程序自定义底部导航栏,切换不同页面显示不同tabBar
3323 0
小程序自定义底部导航栏,切换不同页面显示不同tabBar
|
缓存 前端开发 Java
Activity显示到Window的过程
写在前面的话 今天看到一个新闻,关于虾米音乐的程序员写的注释。 好像图都绿了,突然间想起在我曾经老大的影响下,我的Log输出已经变成了fxxk。
943 0
|
Android开发 容器 数据格式
ViewPager详解(二)——自动轮播和手动切换完整示例
MainActivity如下: package cn.ww; import android.app.Activity; import android.
1198 0
|
Android开发
动态修改ViewPagerIndicator CustomTabPageIndicator Tab标签文字颜色
在style.xml中修改CustomTabPageIndicator的android:textColor属性即可: @drawable/tab_indicator @style/CustomTabPageIndicator.
1213 0