自定义窗口

1.解决方案

   用主题和windowsManager自定义窗口的属性和功能。

2.实现机制

   2.1 用主题自定义窗口属性

         Android中主题Theme就是一种应用到整个应用或某个activity的外观风格。使用主题有两种方式,系统主题和自定义主题

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.android.demo"
    android:versionCode="1"
    android:versionName="1.0" > 
    <uses-sdk android:minSdkVersion="10" /> 
    <application
         在application节点下的是全局的设置
        <!-- android:theme="THEME_NAME" apply to the application tag for a global theme -->
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <activity 
            android:name=".DemoActivity" 
            在activity节点下的是某个activity的设置
           <!--  android:theme="THEME_NAME" apply to an activity for a individual theme -->
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" /> 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application> 
</manifest>
  几种常见的theme 

  Theme.NoTitleBar  移除标题栏

  Theme.NoTitleBar.Fullscreen移除标题栏和 状态栏全屏显示

  Theme.Dialog让activity看着像对话框

  Theme.Wallpaper将用户设置的墙纸设置为窗口的背景


    2.2自定义主题

    在res/values目录下建立style.xml,常见的与窗体有关的主题元素有:

    android:windowNoTitle控制是否移除默认的标题栏,为true的话移除

    android:windowFullScreen控制是否移除默认状态栏,为true的话移除

    android:windowBackground将某个颜色或可绘制的资源设为背景

    android:windowContentOverlay默认情况下就是状态栏的阴影,可以用任何资源代替,设置为null时候(xml中的@null)将其移除

    android:windowTitleBackgroundStyle应用到窗口的标题视图的风格

    android:windowTitleSize窗口标 题的高度

    android:windowTitleStyle窗口标题文本的风格

    res/values/style.xml

    

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name = "MyTheme.One"  parent = "@android:style/Theme">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowContentOverlay">@null</item> 
    </style>
    <!-- 主题和风格可以从父主题继承 --> 
    <style name = "MyTheme.Two"  parent = "@android:style/Theme">
        <item name="android:windowBackground">@drawable/ic_launcher</item>
        <item name="android:windowFullscreen">@null</item> 
    </style> 
</resources>


然后再清单文件中引用即可

例如如果要Theme.One作用到activity只要在该activity节点下加一行android:theme="@style/MyTheme.One" 即可

 也可以在代码中自定义窗口属性

  在将内容视图作用于activity之前,每个窗口特性的改动都要调用Activity.requestWindowFeature(),也就是说所有通过

Activity.requestWindowFeature()修改窗体的改动都需要在setContentView之前完成,否则是无效的

   2.2.1

   FEATURE_CUSTOM_TITLE自定义标题

   通过这个特征,可以用完全自定义的资源来替换标准的标题( 代码如下) 

 @Override

  

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentview之前请求窗口的特性 requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); setContentView(R.layout.main); //设置自定义标题的布局资源 getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.custome_title); }
   FEATURE_NO_TITLE用于移除标准的标题视图(不能与其他的窗口特性标志一起使用)

   FEATURE_PROGRESS在窗口标题中设置一个确定式的进度条,该进度条的值可以使从0到100之间任意值

   

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentview之前请求窗口的特性
        requestWindowFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.main);
        //设置进度条可见
        setProgressBarVisibility(true);
    	//设置进度值
        setProgress(0); 
     /* //到达100的时候进度栏消失
      setProgress(100); */  
    }
FEATURE_LEFT_ICON 

FEATURE_RIGHT_ICON这两个都是使用图标的activity

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentview之前请求窗口的特性
        requestWindowFeature(Window.FEATURE_LEFT_ICON);
        setContentView(R.layout.main);
        setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,R.drawable.ic_launcher);
       
    }


   

  

   

   





  



    




























































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值