本文主要介绍如何自定义标题栏组件、自定义标题栏样式以及标题栏显示进度、全屏等小技巧

 

1、自定义标题栏组件

比如,对于新浪微博客户端的信息菜单点击后title效果代码如下

定义layout文件命名为info_title.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="match_parent"
	android:layout_height="match_parent">
   	<TextView android:id="@+id/infoAtMeTextView"   
   		android:layout_width="wrap_content"   
   		android:layout_height="match_parent"   
   		android:layout_weight="1"
   		android:gravity="center"
  		android:text="\@我" /> 	
   	<TextView android:id="@+id/infoCommentTextView"   
   		android:layout_width="wrap_content"   
   		android:layout_height="match_parent"   
   		android:layout_weight="1"
   		android:gravity="center"
  		android:text="评论" /> 
   	<TextView android:id="@+id/infoPrivateMsgTextView"   
   		android:layout_width="wrap_content"   
   		android:layout_height="match_parent"   
   		android:layout_weight="1"
   		android:gravity="center"
  		android:text="私信" /> 
</LinearLayout>

在相应的activity中

@Override
public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	// 1. 设置标题栏样式
	requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
	// 2. 设置activity内容
	setContentView(R.layout.status_list);
	// 3. 设置标题栏内容
	getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.status_list_info_title);
}

其中的1. 设置标题栏样式必须在2. 设置activity之前,否则运行会报错,至于3. 设置标题栏内容则可以在最后,并且可以在后面的程序中继续修改,这样我们就可以在用户操作时动态修改标题栏自定义内容了。

 

关于动态修改的话,title使用的是或的方式,及效果叠加,显示第二个custom title的时候,第一个默认也会显示,如果不想显示需要手动coding隐藏 ,建议将custom title的layout文件根元素设置相应id,在java中获得该id在需要的时候setVisibility(View.VISIBLE),不需要的时候setVisibility(View.GONE)即可。有更好的方法欢迎留言,thx

 

ps:用户这样设置后发现自定义的layout并没有办法填充满这个标题栏,这个时候我们可以将标题栏的背景色与标题栏内容的layout背景色设置成一致,就可以认为充满整个标题栏了啊。关于如何设置标题栏背景色见下面。

 

2、自定义标题栏的样式

2.1、在res/value下增加style.xml用来保存标题栏的样式

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
	<style name="CustomWindowTitleBackground">
	       <item name="android:background">#2828FF</item>
	</style>
	<style name="update_status_style" parent="android:Theme">
	     <item name="android:windowTitleSize">30dp</item>
	     <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
	</style>
</resources>

 

2.2、在AndroidManifest.xml设置对应Activity的标题栏样式

调用上面的样式

<activity android:name=".UpdateStatusActivity"
                  android:label="@string/app_name"
                  android:theme ="@style/update_status_style">
            <intent-filter>
            	<action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

 

关于item更多的name,参考

http://developer.android.com/guide/topics/ui/themes.html

 

3、标题栏显示页面加载进度,添加延时加载标志

在OnCreate中setContentView之前增加requestWindowFeature

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

在需要显示进度时,一般是操作开始时(如页面正在加载中或进程开始),设置进度条可见

setProgressBarIndeterminateVisibility(true);

 在操作完成时(如页面加载或进程结束等等),设置进度条消失

setProgressBarIndeterminateVisibility(false);

其中requestWindowFeature表示改变窗口的样式。FEATURE_INDETERMINATE_PROGRESS为进度条的标志

setProgressBarIndeterminateVisibility表示设置标题栏的进度条是否可见

 

4、全屏

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐