• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Andriod中Style/Theme原理以及Activity界面文件选取过程浅析

Andriod中Style/Theme原理以及Activity界面文件选取过程浅析

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android theme style,theme style,activity theme,android studio theme,android:theme等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Andriod中Style/Theme原理以及Activity界面文件选取过程浅析


通过对前面的一篇博文<从setContentView()谈起>的学习,我们掌握了Activity组件布局文件地创建过程以及

其顶层控件DecorView,今天我们继续庖丁解牛---深入到其中的generateLayout()方法,步步为营掌握一下内容:

1、Activity中Theme(主题)的系统定义以及使用之处;

2、如何根据设置的Feature(属性)选择合适的布局文件。

另外,对于下文中Theme和Style的概念进行一个简要说明:

都是由 我们看看Android另外一个Theme.NoTitleBar属性定义,默认继承了"Theme"集合。

  true

 

其实xml文件中声明的任何元素(包括属性),必须通过代码去获取他们的值,然后进行适当地逻辑运算。那么

系统是在什么地方去解析这些Window属性,并且选择合适地布局文件?

二、Theme主题的解析以及布局文件的选取

如果对setContentView()调用过程不太熟悉的朋友,可以先看看前面一篇博文<从setContentView()谈起>。

今天我们深入到其中generateLayout()方法,该方法地主要作用就是解析这些Window属性,然后选择合适地

布局文件作为我们地Activity或者Window界面地承载布局文件,即DecorView的直接子View。

 

在进行具体分析之前,Android还提供了另外两种简单API让我们制定界面的风格,如下两个方法:

1、requestFeature() 设定个该界面的风格Feature,例如,FEATURE_NO_TITLE(没有标题) 、

FEATURE_PROGRESS(标题栏带进度条)。必须在setContentView()前调用,否则会报异常。

FEATURE属性定义在Window.java类

2、getWindow().setFlags(),为当前的WindowManager.LayoutParams添加一些Flag。

Flag标记定义在WindowManager.LayoutParams.java类。


通过这两种方法隐藏状态栏和标题栏的例子为:

 

@Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); //hidetitlebarofapplication //mustbebeforesettingthelayout requestWindowFeature(Window.FEATURE_NO_TITLE); //hidestatusbarofAndroid //couldalsobedonelater getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); } 完整例子,可见于博文

源码分析:

这两个方法是在Window.java类实现的,如下:

publicclassWindow{ /**Flagforthe"optionspanel"feature.Thisisenabledbydefault.*/ publicstaticfinalintFEATURE_OPTIONS_PANEL=0; /**Flagforthe"notitle"feature,turningoffthetitleatthetop *ofthescreen.*/ publicstaticfinalintFEATURE_NO_TITLE=1; /**Flagfortheprogressindicatorfeature*/ publicstaticfinalintFEATURE_PROGRESS=2; /**Flagforhavinganiconontheleftsideofthetitlebar*/ publicstaticfinalintFEATURE_LEFT_ICON=3; /**Flagforhavinganiconontherightsideofthetitlebar*/ publicstaticfinalintFEATURE_RIGHT_ICON=4; /**Flagforindeterminateprogress*/ publicstaticfinalintFEATURE_INDETERMINATE_PROGRESS=5; /**Flagforthecontextmenu.Thisisenabledbydefault.*/ publicstaticfinalintFEATURE_CONTEXT_MENU=6;//菜单 /**Flagforcustomtitle.Youcannotcombinethisfeaturewithothertitlefeatures.*/ publicstaticfinalintFEATURE_CUSTOM_TITLE=7;   //默认的FEATURESFEATURE_OPTIONS_PANEL&FEATURE_CONTEXT_MENU protectedstaticfinalintDEFAULT_FEATURES=(1<Notethatsomeflagsmustbesetbeforethewindowdecorationis

 

*created. *Thesewillbesetforyoubasedonthe{@linkandroid.R.attr#windowIsFloating} *attribute. *@paramflagsThenewwindowflags(seeWindowManager.LayoutParams). *@parammaskWhichofthewindowflagbitstomodify. */ //mask代表对应为的掩码,设置对应位时,需要先清空对应位的掩码,然后在进行或操作。类似的函数可以见于View.java类的setFlags()方法 publicvoidsetFlags(intflags,intmask){ finalWindowManager.LayoutParamsattrs=getAttributes();//当前的WindowManager.LayoutParams属性 //将设置的flags添加至attrs属性中 attrs.flags=(attrs.flags&~mask)|(flags&mask); mForcedWindowFlags|=mask; if(mCallback!=null){//Activity和Dia
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Andriod中Style/Theme原理以及Activity界面文件选取过程浅析
  • Android疑难杂症之Theme,android疑难杂症

相关文章

  • 2017-05-26Android中调用文件管理器并返回选中文件的路径,android文件管理器
  • 2017-05-26几种执行shell的方法
  • 2017-05-26Kotlin中功能操作与集合(KAD 11),
  • 2017-05-26活动的生命周期(五)活动的启动模式,生命周期模式
  • 2017-05-26匿名社交1--登陆,匿名社交1--
  • 2017-05-26充值,充值平台
  • 2017-05-26android获取屏幕宽高与获取控件宽高,android获取控件
  • 2017-05-26Android开发笔记(9)——初步设置Menu,androidmenu
  • 2017-05-26极其简单的搭建eclipse的android开发环境,搭建eclipseandroid
  • 2017-05-26翻翻git之---一个丰富的通知的工具库 NotifyUtil

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android之ViewPager 第二课,androidviewpager
    • android开发学习——小细节注意,android开发细节
    • Android特效专辑(八)——实现心型起泡飞舞的特效,让你的APP瞬间暖心
    • 安卓第十五天笔记-图形图像一些简单处理,安卓第图形图像
    • Android热补丁技术—dexposed原理简析(手机淘宝采用方案)
    • [android] 手机卫士设备管理权限锁屏,android锁屏
    • 安卓开源项目周报0104,安卓开源项目0104
    • Android 接入 OpenCV库的三种方式,androidopencv
    • Android 手机卫士--是否有密码区分对话框类型,android卫士
    • Android View体系(一)视图坐标系

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有