• 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
  • 相关阅读:
    输出由“*”组成的菱形
    一个简单的计算器(c++)
    输入学号,显示对应的姓名(c++)
    使用 Puppet 在 Windows Azure 中配备 Linux 和 Windows 环境
    微软开放技术发布针对 Mac 和 Linux 的更新版 Azure Node.JS SDK 和命令行工具
    微软开放技术开发了适用于 Windows Azure 移动服务的开源 Android SDK
    微软开放技术发布开源 Jenkins 插件以将 Windows Azure Blob 服务用的开作存储库
    VM Depot 登陆中国!
    VM Depot 喜迎中国本土开源镜像!
    VM Depot 助您使用本地开源软件架设开发 Web 站点
  • 原文地址:https://www.cnblogs.com/merryjd/p/2853262.html
Copyright © 2020-2023  润新知