博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义Activity标题栏(Title bar)和窗体显示状态操作(requestWindowFeature()的应用)
阅读量:2382 次
发布时间:2019-05-10

本文共 4734 字,大约阅读时间需要 15 分钟。

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);


        
// ...

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

效果图

转载地址:http://rouab.baihongyu.com/

你可能感兴趣的文章
令人羡慕的法国程序员,没有“996”, 40岁的时候最值钱!
查看>>
程序员面试挂了,奇葩HR:没有互联网气质! 网友:叫tony弄下头发
查看>>
阿里老程序员薪资被倒挂后,无奈吐槽:该找个不加班的工作了
查看>>
80%的前端大牛都会忽视的CSS 小知识
查看>>
程序员感叹:专科文聘都是十几万的年薪,优胜略汰了要
查看>>
程序员7天内面试了10家公司,如何从命中率0%到命中率至70%?
查看>>
美团第一位前端工程师竟是转行程序员!关于他的10年技术生涯
查看>>
累到想删库,程序员职业倦怠的真实生活
查看>>
CSS3实现王者荣耀匹配人员加载页面
查看>>
千辛万苦招来一名程序员,入职第一天就离职,原因让HR以为听错了
查看>>
盘点那些程序员最污的技术段子,老码农秒懂!
查看>>
程序员:活到 35 岁,我对不起谁?
查看>>
前端小白入门必学:HTML/CSS/JS编码规范
查看>>
CSS3实现王者匹配时的粒子动画效果
查看>>
从青铜到王者,10个css3伪类使用技巧和运用
查看>>
自学的程序员和自学的吉他手有很多共同点,你玩过吉他吗?
查看>>
CSS动画之旋转魔方轮播
查看>>
CSS 很容易,那为什么大家还是把 CSS 写的那么烂呢?
查看>>
IT业狼多肉少?程序员的绝地求生,谁能给他们一把“98K”?
查看>>
程序员学历的竞争:10个人面试阿里,研究生成群,4个北大
查看>>