您的位置:首页 > 产品设计 > UI/UE

Titlebarl的三种去除方式和requestwindowfeature,configchanges的详细解读

2016-09-25 09:29 344 查看
在进行android开发时,每个Activity会默认带上一个title bar用以显示程序名,有时为了扩大屏幕的显示区域需要去掉这个titlebar,去掉屏幕上的title bar有3个方法,

第一个方法是在代码去掉title bar

在Activity的onCreate中加入如下代码:

[java] view
plain copy

this.requestWindowFeature(Window.FEATURE_NO_TITLE);  

放置于setContentView(R.layout.activity_main);之前皆可。

但是使用这种方法,是在Activity将要显示的时候,仍然会出现title bar,然后再将其去掉,用户体验不好。

 以下是对this.requestwindowFeature(window.FEATURE_NO_TITLE)的详细解读:

this.requestWindowFeature(Window.FEATURE_NO_TITLE)相关

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:标题栏右侧的图标
二、详解
默认显示状态

 
1.FEATURE_CUSTOM_TITLE详解

this.requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);


 
这是因为没有设置Featrue
在上面代码后加:getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);
 

自定义标题完成,它是一个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" >

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
/>

<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:textColor="#000000"
android:text="FEATURE_CUSTOM_TITLE" />

</LinearLayout>


2.FEATURE_INDETERMINATE_PROGRESS详解
可以用来表示一个进程正在运行

this.requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_INDETERMINATE_PROGRESS, R.layout.progress);
setProgressBarIndeterminateVisibility(true);


<?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"
style="?android:attr/progressBarStyleSmallTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" >
</ProgressBar>

</LinearLayout>


3.FEATURE_LEFT_ICON和FEATURE_RIGHT_ICON详解

//111
requestWindowFeature(Window.FEATURE_RIGHT_ICON);
setContentView(R.layout.main);
getWindow().setFeatureDrawableResource(Window.FEATURE_RIGHT_ICON,R.drawable.ic_launcher);

//222
requestWindowFeature(Window.FEATURE_LEFT_ICON);
setContentView(R.layout.main);
getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,R.drawable.ic_launcher);


 
 4.FEATURE_NO_TITLE详解

this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);


 

分类: Android开发技术学习

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                                                         完                   美                   分                   割                      线

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

第二种方法是使用style配置文件,步骤如下:

1.在res/values文件夹下创建一个xml文件,名为mainStyle.xml,内容如下:

<
1109e
div class="bar" style="padding-left:45px;">

[java] view
plain copy

<?xml version="1.0" encoding="utf-8"?>  

    <resources>     

        <style name="NoTitle" parent="android:Theme">     

            <item name="android:windowNoTitle">true</item>     

        </style>     

    </resources>    

 

2.然后在AndroidManifest.xml中需要去掉title bar的activities的节点上加上一个样式属性,代码如下:

[java] view
plain copy

<activityandroid:name=".view.AutoTaskDemo" android:label="@string/app_name"  

  

      android:configChanges="keyboardHidden|orientation|locale"android:theme="@style/NoTitle">  

android:configChanges详解:

VALUE                        DESCRIPTION                                                                                                                                                                                      
"mcc"国际移动用户识别码所属国家代号是改变了-----  sim被侦测到了,去更新mcc    mcc是移动用户所属国家代号
"mnc"国际移动用户识别码的移动网号码是改变了------ sim被侦测到了,去更新mnc    MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网
"locale"地址改变了-----用户选择了一个新的语言会显示出来
"touchscreen"触摸屏是改变了------通常是不会发生的
"keyboard"键盘发生了改变----例如用户用了外部的键盘
"keyboardHidden"键盘的可用性发生了改变
"navigation"导航发生了变化-----通常也不会发生
"screenLayout"屏幕的显示发生了变化------不同的显示被激活
"fontScale"字体比例发生了变化----选择了不同的全局字体
"uiMode"用户的模式发生了变化
"orientation"屏幕方向改变了
"screenSize"屏幕大小改变了
"smallestScreenSize"屏幕的物理大小改变了,如:连接到一个外部的屏幕上

android:configChanges

在android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置。在activity加上android:configChanges="keyboardHidden|orientation"属性,就不会重启activity.而只是调用onConfigurationChanged(Configuration
newConfig).这样就可以在这个方法里调整显示方式.

[java] view
plain copy

public void onConfigurationChanged(Configuration newConfig) {    

        try {    

            super.onConfigurationChanged(newConfig);    

            if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {    

                Log.v("Himi", "onConfigurationChanged_ORIENTATION_LANDSCAPE");    

            } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {    

                Log.v("Himi", "onConfigurationChanged_ORIENTATION_PORTRAIT");    

            }    

        } catch (Exception ex) {    

        }    

    }    

<?xml version="1.0" encoding="utf-8"?>  

<manifest xmlns:android="http://schemas.android.com/apk/res/android"  

    package="com.himi" android:versionCode="1" android:versionName="1.0">  

    <application android:icon="@drawable/icon" android:label="@string/app_name">  

        <activity android:name=".MainActivity" android:label="@string/app_name"  

            android:configChanges="keyboardHidden|orientation">  

            <intent-filter>  

                <action android:name="android.intent.action.MAIN" />  

                <category android:name="android.intent.category.LAUNCHER" />  

            </intent-filter>  

        </activity>  

    </application>  

    <uses-sdk android:minSdkVersion="4" />  

</manifest>

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                                                         完                   美                   分                   割                      线

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 第三种方法是直接在AndroidManifest.xml中进行修改,

把需要去掉title bar的activities的节点上加上一个样式属性,代码如下:

[java] view
plain copy

<activityandroid:name=".view.SettingActivity"  

  

      android:configChanges="keyboardHidden|orientation"android:theme="@android:style/Theme.NoTitleBar"/>  

 

也可以在AndroidManifest.xml文件的application节点上修改,对所有的activity都有效,代码如下:

[java] view
plain copy

<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar">
   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息