您的位置:首页 > 移动开发 > Android开发

Android标题样式自定义

2015-01-20 19:40 441 查看
前言

最近一直在研究安卓的标题样式,包括Theme.Light主题自带的标题以及ActionBar的样式,也参考了网上很多的方法,但是发现普遍存在一个问题:刚开始加载程序时,还是会显示之前的标题风格,然后显示最终自定义的风格。分析原因,是因为在Activity中用代码设置的,而安卓的界面首先是先加载XML文件中的布局,从这一点我们就找到了思路:在XML中就已经先定义好标题。

思路

1.把系统之前的标题去掉,使用无标题Theme,比如Theme.Light.NoTitleBar或者Theme.Holo.Light.NoActionBar

2.在Activity自带的xml布局文件中,定义标题(TextView,使文字居中)

步骤

1.在AndroidManifest文件中使用上述主题

2.修改xml布局文件,如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <TextView 
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#aa0000"
        android:textColor="#ffffff"
        android:textSize="22sp"
        android:text="萨摩耶"
        android:gravity="center_horizontal|center_vertical" />
</LinearLayout>



这里我使用的是LinearLayout布局方式,这里注意的是:使用了LinearLayout方式,那么它的布局方向应该是android:orientation="vertical",标题其实是一个TextView,width是父容器的宽度,注意gravity是textView中文字的位置,不是整个TextView在Activity中的位置。

当然也可以使用RelativeLayout,则TextView最后一条的属性改成android:layout_centerHorizontal="true"就行

使用时和原来一样,在Activity的onCreate中,setContentView(R.layout.activity.main)

进阶

为了实现标题布局的复用,还可以当独将标题自定义为一个xml,比如我在layout文件夹下新建一个title.xml文件,内容如下

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    
    <TextView 
		android:id="@+id/tv2"
		android:layout_width="match_parent"
		android:layout_height="match_parent"
		android:textSize="22sp"
		android:background="#bb0000"	
		android:gravity="center_horizontal|center_vertical"
		android:textColor="#ffffff"
		android:text="@string/app_name" />
       
</FrameLayout>


这里使用的是FrameLayout,目的是为了以前如果需要添加其他东西(比如类似QQ左上角的返回,右上角的添加等),FrameLayout的特征是,后来的东西可以部分或者全部遮挡之前的,在这里用到的就是这个特性,当然用其他布局方式也行。

然后在activity_main.xml中内容加入如下,位置和刚开始新建一个应用时默认的TextView位置是并排的,不过要放在第一个位置。

<include 
        android:layout_width="match_parent"
        android:layout_height="50dp"
        layout="@layout/title" />


关于include的使用,可以见到的理解为就是把布局文件加进来,这里的width和height都是重要的,不可遗漏,不然会出问题。include具体可以用法可以参考Android抽象布局
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: