Android界面相关的类

Window

Activity的显示界面对象,并作为顶层View被加入到WindowManager中。Window提供了标准的UI显示策略:界面背景、标题区域、默认的事件处理。

该抽象类仅仅有一个子类PhoneWindow。在Activity的创建过程中,ActivityThread类调用performLaunchActivity方法时会运行Activity.attach()方法,该方法包括以下的代码片段:

    //将包括Fragment的容器绑定到Activity实例中
mFragments.attachActivity(this, mContainer, null); //为Activity实例创建一个新的Window对象
mWindow = PolicyManager.makeNewWindow(this);
mWindow.setCallback(this);
mWindow.setOnWindowDismissedCallback(this);
mWindow.getLayoutInflater().setPrivateFactory(this);
if (info.softInputMode != WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED) {
mWindow.setSoftInputMode(info.softInputMode);
}
if (info.uiOptions != 0) {
mWindow.setUiOptions(info.uiOptions);
}
...
//为Window对象设置Window Manager
mWindow.setWindowManager(
(WindowManager)context.getSystemService(Context.WINDOW_SERVICE),
mToken, mComponent.flattenToString(),
(info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0);
if (mParent != null) {
mWindow.setContainer(mParent.getWindow());
}
mWindowManager = mWindow.getWindowManager();

WindowManager

应用和设备窗体管理器(Window Manager)交互的接口,能够通过例如以下方式获取该类实例:

Context.getSystemServier(Context.WINDOW_SERVICE);

每一个WindowManager实例都和一个特定的Display对象绑定在一起。

Display

代表一个逻辑显示屏(logical Display),显示区域被划分成两种:

  • 应用显示区域(Application Display Area):该区域负责显示应用的Window,不包括系统相关的显示。所以该区域有可能会比实际电视区域小,能够通过例如以下方法获取应用显示区域:
public void getSize(Point outSize);  //返回显示区域的大小,结果保存在outSize中。单位为px

public void getRectSize(Rect outSize);  //返回显示区域的矩形区域,结果保存在outSzie中,单位为px

public void getMetrics(DisplayMetrics outMetrics); // 返回显示区域的指标。详细能够查阅DisplayMetrics类
  • 实际显示区域(Real Display Area): 该区域显示应用的window和系统相关的显示,普通情况下,该区域大小和绑定的物理屏幕大小同样,除非Window Manager模拟将内容显示在小屏幕上,能够通过以下的方法获取该区域的大小:
public void getRealSize(Point outSize);

public void getRealMetrics(DisplayMetrics outMetrics);

注意:逻辑显示屏和物理显示屏不同,逻辑显示屏能够被映射到多个物理显示屏上(比方在Presentation的时候)

DisplayMetrics

用于保存屏幕大小,屏幕密度,字体缩放的类,一般通过以下的代码获取包括上述指标的该类对象:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

该类中包括以下比較重要的字段:

public static final int DENSITY_LOW = 120;   //
public static final int DENSITY_MEDIUM = 160; // 默认的屏幕密度
public static final int DENSITY_HIGH = 240; //
public static final int DENSITY_XHIGH = 320; // public int widthPixels; //屏幕的宽度,单位为px
public int heightPixels; //屏幕的高度。单位为px public float density; //屏幕密度(以160dpi为基准),当屏幕密度为120dpi时。该字段的值为0.75。当屏幕密度为320dpi时。该字段的值为2 public int densityDpi; //屏幕密度,单位为每英寸的像素点个数 public float xdpi; //X方向上每英寸像素点的个数
public float ydpi; //Y方向上每英寸像素点的个数

Android界面相关的类的更多相关文章

  1. android中与SQLite数据库相关的类

    为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...

  2. 【Android】7.8 MyDemos项目的结构和主界面相关代码

    分类:C#.Android.VS2015: 创建日期:2016-02-17 一.简介 上一讲已经说过,系统升级为Win10后,重新创建了一个新的项目:MyDemos,并把前7章合并到了这个项目中,这次 ...

  3. android 界面设计基本知识Ⅲ

    本章继续讲述在android界面设计中相关的知识点.介绍内容包括BroadcastReceiver(广播),Service(服务),Widget(小部件),WebView(网页加载控件). 1.Bro ...

  4. Android UI相关开源项目库汇总

    最近做了一个Android UI相关开源项目库汇总,里面集合了OpenDigg 上的优质的Android开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个st ...

  5. Android教材 | 第三章 Android界面事件处理(一)—— 杰瑞教育原创教材试读

      前  言 JRedu Android应用开发中,除了界面编程外,另一个重要的内容就是组件的事件处理.在Android系统中,存在多种界面事件,比如触摸事件.按键事件.点击事件等.在用户交互过程中, ...

  6. Android 界面滑动卡顿分析与解决方案(入门)

    Android 界面滑动卡顿分析与解决方案(入门) 导致Android界面滑动卡顿主要有两个原因: 1.UI线程(main)有耗时操作 2.视图渲染时间过长,导致卡顿 目前只讲第1点,第二点相对比较复 ...

  7. (转载)实例详解Android快速开发工具类总结

    实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...

  8. Android 通过 Intent 传递类对象或list对象

    (转:http://www.cnblogs.com/shaocm/archive/2013/01/08/2851248.html) Android中Intent传递类对象提供了两种方式一种是 通过实现 ...

  9. android 界面设计基本知识Ⅱ

    上一章讲述了Android界面设计时,一些基本控件的使用,本章主要讲述自定义控件,Fragment和Headler线程机制. 1.自定义控件 (1)基本知识 dp.sp和dx      px:像素点  ...

随机推荐

  1. kettle(一)概述

    近期两个月一直和kettle打交道,从開始的没听说过,到如今能够熟练运用,不得不说项目驱动下,学习东西是最快的.好了,尽管使用kettle应付项目的任务绰绰有余.可是还是想系统的学习一下,总结一下.比 ...

  2. cocos2d-x的声音控制

    声音控制SimpleAudioEngine是单例.下面是其方法. [cpp] view plaincopy //获得SimpleAudioEngine的实例 static SimpleAudioEng ...

  3. jquery源码12 offset() : 位置和尺寸的方法

    // Back Compat <1.8 extension point jQuery.fx.step = {}; if ( jQuery.expr && jQuery.expr. ...

  4. android 图片特效处理之光照效果

    这篇将讲到图片特效处理的光照效果.跟前面一样是对像素点进行处理,算法是通用的. 算法原理:图片上面的像素点按照给定圆心,按照圆半径的变化,像素点的RGB值分别加上相应的值作为当前点的RGB值. 例: ...

  5. 使程序在Linux下后台运行 (关掉终端继续让程序运行的方法)

    你是否遇到过这样的情况:从终端软件登录远程的Linux主机,将一堆很大的文件压缩为一个.tar.gz文件,连续压缩了半个小时还没有完成,这时,突然你断网了,你登录不上远程Linux主机了,那么前面的半 ...

  6. 突破极限 解决大硬盘上安装Unix新思路

    一.问题提出 硬盘越做越大,然我喜欢让我忧.10年前就遇到过在586电脑BIOS不认识超过8.4G容量硬盘的问题,以及Windows Nt操作系统不认大硬盘(容量超过8.4G)的问题,对于Linux ...

  7. C#开发 —— 异常处理

    System.ArithmeticException 在算术运行期间发生异常 System.ArrayTypeMismatchException 存储元素的实际类型与数组的实际类型不兼容而导致存储失败 ...

  8. 体验域名注册解析与SSL证书

  9. __get__()方法研究

    看源码的时候发现了这个魔法方法 class A(object): def __init__(self): self.name = 'mod' def __get__(self, instance, o ...

  10. HDU 2191 悼念512汶川大地震

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...