- 浏览: 73688 次
- 性别:
- 来自: 苏州
最新评论
-
weishen:
AndEngine还是一个比较不错的游戏引擎,起码对于初学者还 ...
AndEngine学习笔记 -
jameslin_2011:
观注。希望能出多些相关文章,学习中。
AndEngine学习笔记 -
无愧衾影:
作用什么样的控件,要看当前的需求会是什么样的,LinearLa ...
关于RelativeLayout的一些看法,欢迎拍砖。 -
sniffer123:
个人觉得,relative layout会造成代码的可读性很差 ...
关于RelativeLayout的一些看法,欢迎拍砖。 -
hklongshao:
nciky1984 写道Relative就是给你一个基准值(上 ...
关于RelativeLayout的一些看法,欢迎拍砖。
原文链接:http://blog.sina.com.cn/s/blog_53a5865c0100n19q.html
Android的GUI层并不复杂。它的复杂度类似于WGUI这类基于布局和对话框的GUI,与MFC、QT等大型框架没有可比性,甚至飞漫魏永明的MiniGUI都比它复杂许多。您也许会问,这样简单的GUI如何实现浏览器呢?原因很简单,浏览器有自己一套GUI。Android浏览器(WebKit)的GUI和Android的GUI实用同一套GDI——Skia,但GUI层是完全不同的设计,分别自成体系。
Windown类,位于代码树frameworks\base\core\java\android\view\Windowjava.java文件。连同注释,这个文件总共一千多行,它概括了Android窗口的基本属性和基本功能。
Window属性列举如下:
FEATURE_OPTIONS_PANEL = 0; 功能不明,参见后面的说明(默认使能)
FEATURE_NO_TITLE = 1; 无标题栏
FEATURE_PROGRESS = 2; 在标题栏上显示加载进度,例如webview加载网页时(条状进度条)
FEATURE_LEFT_ICON = 3; 在标题栏左侧显示一个图标
FEATURE_RIGHT_ICON = 4; 在标题栏右侧显示一个图标
FEATURE_INDETERMINATE_PROGRESS = 5; 不确定的进度(圆圈状等待图标)
FEATURE_CONTEXT_MENU = 6; 上下文菜单,相当于PC上的右键菜单(默认使能)
FEATURE_CUSTOM_TITLE = 7; 自定义标题栏,该属性不能与其他标题栏属性合用
FEATURE_OPENGL = 8; 如果开启OpenGL,那么2D将由OpenGL处理(OpenGL中2D是3D的子集)
PROGRESS_VISIBILITY_ON = -1; 进度条可见
PROGRESS_VISIBILITY_OFF = -2; 进度条不可见
PROGRESS_INDETERMINATE_ON = -3; 开启不确定模式
PROGRESS_INDETERMINATE_OFF = -4; 关闭不确定模式
PROGRESS_START = 0; 第一进度条的最小值
PROGRESS_END = 10000; 第一进度条的最大值
PROGRESS_SECONDARY_START = 20000; 第二进度条的最小值
PROGRESS_SECONDARY_END = 30000; 第二进度条的最大值
*说明:FEATURE_OPTIONS_PANEL的意思大概是:当用户选中菜单时,窗口将调用onOptionsItemSelected函数,以处理菜单功能。如果没有FEATURE_OPTIONS_PANEL选项,那么菜单就不响应了?没试过,网上也没找到。
应用示例:
1、隐藏标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
2、在标题栏显示进度条
requestWindowFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.progressbar_1);
setProgressBarVisibility(true);
final ProgressBar progressHorizontal = (ProgressBar) findViewById(R.id.progress_horizontal);
setProgress(progressHorizontal.getProgress() * 100);
setSecondaryProgress(progressHorizontal.getSecondaryProgress() * 100);
3、使用自定义标题栏
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.xxx);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.my_title_bar);
4、清除标题栏内容,而区域保留
((ViewGroup) getWindow().findViewById(com.android.internal.R.id.title_container)).removeAllViews();
5、隐藏标题栏
((ViewGroup)getWindow().
findViewById(com.android.internal.R.id.title_container)).setVisibility(View.GONE);
6、显示标题栏
...setVisibility(View.VISIBLE);
其他注意事项
(1) requestWindowFeature()要在setContentView()之前调用;
(2) 设置各种Feature,是具有排它性的,一旦设置,后续不可更改为别的类型;
(3) 当使用TabHost(由ActivityGroup派生)时,各个Tab里的Activity,要么都是NO_TITLE,要么都是CUSTOM_TITLE,无法分别进行设置。
Window类除去一大堆FEATURE_属性之外,剩下的内容无外乎两大部分:
一、定义Callback接口,它包含一系列dispatchXxxx函数和一系列onXxxx函数,用于处理UI事件;
二、定义了自己的WindowManager——LocalWindowManager。主要修改了addView函数,设置title。
Callback接口包含以下函数:
public boolean dispatchKeyEvent(KeyEvent event);
处理Key事件。至少,你的代码要调用superDispatchKeyEvent函数。
public boolean dispatchTouchEvent(MotionEvent event);
处理touch事件。至少,你的代码要调用superDispatchTouchEvent函数。
public boolean dispatchTrackballEvent(MotionEvent event);
处理trackball事件。至少,你的代码要调用superDispatchTrackballEvent函数。
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event);
处理Accessibility事件(辅助事件,如焦点变化,按钮被点击等),处理完成后返回true。
创建显示panel的view
可返回null,将为你创建默认content(通常是一个menu)。
应返回放置panel的顶层view。
public View onCreatePanelView(int featureId);
初始化panel菜单,如果onCreatePanelView函数返回null将调用此函数,创建一个标准菜单,你可以向它添加菜单项。只有当panel第一次显示时方调用此函数。如果返回false,panel将无法显示。
public boolean onCreatePanelMenu(int featureId, Menu menu);
每次panel窗口显示前,都会调用此函数。应当返回true,如果返回false将不显示。
public boolean onPreparePanel(int featureId, View view, Menu menu);
当用户打开panel的菜单时被调用。当菜单样式切换时也会调用。例如,从图标菜单切换至扩展菜单。
返回true允许菜单打开,返回false阻止菜单打开。
public boolean onMenuOpened(int featureId, Menu menu);
用户选择菜单项。
public boolean onMenuItemSelected(int featureId, MenuItem item);
当前窗口属性改变。
public void onWindowAttributesChanged(WindowManager.LayoutParams attrs);
窗口的view发生改变。
public void onContentChanged();
窗口焦点变化。
public void onWindowFocusChanged(boolean hasFocus);
窗口附加到窗口管理器上。
public void onAttachedToWindow();
窗口从窗口管理器上摘除。
public void onDetachedFromWindow();
panel关闭时被调用。
如果一个后续的panel将展开(此panel为后续panel腾出空间),则不会调用此函数。
public void onPanelClosed(int featureId, Menu menu);
当用户按下了search按钮。
如果启动了搜索界面则返回true,如果不能执行则返回false。
public boolean onSearchRequested();
WindowManager干什么?它并不是什么“窗口管理器”,WindowManagerService才是窗口管理器。名字叫的玄乎,而实际上WindowManager主要管理一堆状态字,而这些状态字里,最常用的就是LayoutParams。
派生关系如下:
ViewManager
|
---- > WindowManager
ViewManager只有三个函数:addView,updateViewLayout,removeView。
而WindowManager的LayoutParams子类内容十分丰富。其实WindowManager.java的主要内容就是由这个类定义构成。它的定义如下:
public static class LayoutParams extends ViewGroup.LayoutParams implements Parcelable
派生关系如下:
ViewManager.LayoutParams
|
---- > WindowManager.LayoutParams
ViewManager的LayoutParams主要有两个宏,两个变量。
两个宏:
FILL_PARENT
WRAP_CONTENT
两个变量:
width
height
发表评论
-
ndk调试
2011-06-28 20:55 1024http://www.devdiv.com/thread-32 ... -
AndEngine学习笔记
2011-05-29 00:58 2698暂时先记录一下思考点 ... -
如何在Android平台下编译带STL的C++程序
2011-05-24 13:03 5322Android操作系统由linux ... -
java-h用法
2011-05-23 20:03 1236按照网上抄来的javah用法一般出错,今天查了一下午在一篇文章 ... -
NDK 5R2B
2011-05-20 16:29 886http://mobile.51cto.com/android ... -
HOME键启动软件同点击图标进入软件区别
2011-03-18 14:53 1223感谢nvstp分享 按HOME键启动的软件的intent会带 ... -
vcard介绍
2011-03-17 15:50 2686原文转载:http://zengrong.net/post/6 ... -
android src
2011-03-13 12:27 1100打包好的src http://code.google.com ... -
Android App项目开发步骤小结
2011-03-10 14:02 1037转载:http://www.androidmi.com/And ... -
关于RelativeLayout的一些看法,欢迎拍砖。
2011-02-27 15:58 2725如需转载请著名 作者:倚风听雪 来源:ht ... -
myEclipse ADT 安装方法
2011-02-20 17:48 4221安装ADT插件 1、 下载ADT 2、从中解压出fe ... -
android透明度调整
2011-02-12 15:11 1971android程序中设置背景透明度可以通过设置 android ... -
Android 系统应用调用,intent的使用总结帖
2011-01-30 18:16 1585Android 系统应用调用 收集与网络,版权归原作者所有 ... -
conversion to dalvik format failed with error 1的解决办法
2011-01-22 19:01 1439原文转载:http://hi.baidu.com/myluy/ ... -
反编译XML文件
2011-01-02 01:36 1229把AXMLPrinter2.jar拷贝到C盘,在控制台cd到要 ... -
如何获取设备屏幕的宽度和高度(分辨率)
2010-12-31 00:52 1395原文转自:http://www.chengyunfeng.co ... -
ListActivity/ListView用法 与 @+id 与 @android:id 关系小解
2010-12-29 04:08 1601文章转自 http://blog.csdn.net/zhqin ... -
命令模式下的异步消息处理(Handler,Message,Looper,MessageQueue)
2010-12-26 20:52 761http://czpsailer.iteye.com/blog ... -
MatrixCursor
2010-12-23 02:50 1623如需转载请著名 作者:倚风听雪 来源:htt ... -
Android Bitmap和Canvas学习笔记
2010-12-19 16:11 1638原文链接: http://www.cnblogs.com/fe ...
相关推荐
### Android的Window类详解 #### 一、概述 在Android开发过程中,`Window`类扮演着极其重要的角色,它是应用程序与用户交互的主要界面之一。本文将深入探讨Android系统的`Window`类,包括其属性和成员函数等内容。...
首先,从标题"android仿window计算器"来看,这个项目的目标是创建一个与Windows操作系统中计算器功能类似的Android应用程序。这要求开发者对两种操作系统的计算器有深入的理解,以便在Android平台上实现相同或相似的...
首先,我们要理解Android窗口(Window)的概念。在Android中,每个Activity都与一个Window对应,它是一个抽象层,负责处理显示内容和用户交互。我们可以通过设置Window的属性来改变应用的视觉效果,例如背景颜色、...
在`ActDialog`类中,将其主题设置为`@android:style/Theme.Dialog`,这样看起来就像一个对话框,而无需`SYSTEM_ALERT_WINDOW`权限。 另外,还有一个替代方案,即使用`TYPE_TOAST`类型的窗口,但这种类型的窗口不能...
Android 中的 Window 管理是 Android 开发中非常重要的一个topic,_WindowManager 是 Android 中对 Window 的管理的核心,通过本文,我们将深入讲解 Android 中 Window 的管理机制。 一、理解 Android 中的 Window ...
在这个特定的例子中,我们关注的是FFmpeg 3.4.2版本,该版本提供了对Android设备硬件解码和软解码的支持,并结合Nativewindow进行视频渲染。下面我们将深入探讨这些关键知识点。 首先,FFmpeg 3.4.2是FFmpeg库的一...
在进入Android应用开发之前,首先需要搭建一个完整的开发环境。这个过程涉及到Windows和Linux两个操作系统,下面我们将详细讲解在这两种操作系统上如何配置Android开发环境。 ### Windows上的Android环境搭建 1. *...
在Android系统中,Multi Window模式是一种高级特性,允许用户在同一屏幕上同时显示和操作两个应用程序,极大地提升了多任务处理的效率。本讲解将深入探讨Multi Window Android的开发过程和实现步骤,帮助开发者理解...
**Android ADB (Android Debug Bridge) 是一个强大的命令行工具,它是Android开发和调试不可或缺的一部分。在Windows环境下,ADB与Platform-Tools包一起提供,帮助开发者进行设备通信、安装应用、数据备份、日志收集...
缺少的Android Window API! AT注意:此库尚处于早期开发中,尚无可用构建。 Cur窗帘是不是? 缺少的Android Window API!...类ExampleApplication:Application(){ Log.d(“ ExampleApplication”,“ $ window
在Android系统中,"NativeWindow"是一个核心概念,它与Android的原生(Native)图形渲染密切相关。在Android应用开发中,尤其是对于高性能图形处理,如游戏开发、图像处理或复杂的用户界面,开发者可能会选择使用C++...
window.android.callAndroidMethod(); ``` 6. **Android调用JavaScript**:Android也可以通过WebView调用JavaScript代码。使用`loadUrl()`方法,传入一个以`javascript:`开头的URL,可以执行JavaScript代码。例如...
// 屏蔽 keycode 等于 84 之类的按键事件 return true; } @Override public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { final AlertDialog.Builder builder = new ...
标题中的“android-sdk-window与ADT下载”涉及到的是Android开发环境的搭建,主要知识点包括Android SDK和Android Developer Tools(ADT)的获取、安装及配置。Android SDK是开发Android应用程序的基础,而ADT是一个...
- **权限请求**: Android 6.0及以上版本需要在运行时请求`SYSTEM_ALERT_WINDOW`权限,以允许创建悬浮窗。 - **用户体验**: 设计合理的悬浮窗尺寸和位置,避免遮挡用户界面关键元素,同时提供方便的关闭机制。 - **...
### Android-window开发环境下载指引 在进行Android应用开发前,首先需要搭建一套完整的开发环境。本文将详细介绍如何下载并配置所需的开发工具,包括Java Development Kit (JDK)、Eclipse IDE以及Android SDK等...
这通常涉及到处理权限、窗口管理(Window Manager)和生命周期管理等复杂问题。这超出了当前的描述范围,但可以作为进一步学习的方向。 总结一下,本教程讲解了如何在Android中实现一个全局的悬浮按钮,并使其能够...