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. ACM-康托展开+预处理BFS之魔板——hdu1430

    魔板 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  2. 2.Brackets安装及常用插件安装

    转自:https://blog.csdn.net/autumn20080101/article/details/53171326 Brackets 是一个免费.开源且跨平台的 HTML/CSS/Jav ...

  3. 利用css去除input按钮上的文字的几种方法

    相信很多时候input上的文字困扰着web前端开发者,必须要通过修改html代码中的value值才能清空按钮上的文字,但很多人不愿意去动html代码,一方面麻烦,另外主要的原因还在于保留文字对seo有 ...

  4. BZOJ 4582 贪心

    思路: 显然是个贪心 排个序 然后扫几遍就好了 (重叠的区间不能取) //By SiriusRen #include <cstdio> #include <algorithm> ...

  5. linux的vi或vim文件时,怎样消除刚才查找字符串的高亮?

    有时候,自己在通过/查找字符串时,会出现: 但是呢,当你保存,再次进入还是会出现这么花的高亮显示,很令人苦恼. 解决办法 随便,输入没有的字符串,即可解决. 如下 /sssssssssssssssss ...

  6. sql server 内置MD5加密函数

    http://blog.csdn.net/rookie_liu_ToFly/article/details/53116932 select right(sys.fn_VarBinToHexStr(HA ...

  7. Kinect 开发 —— WaveHand

    基本注释都写了,就不废话了 <Window x:Class="KinectBasicHandTrackingFrameworkTest.MainWindow" xmlns=& ...

  8. centos的dns配置总结

    找的一篇好的存根 DNS正反向解析 DNS(Domain Name Service)域名服务.就是域名解析服务器.所谓名称解析的过程就是某个应用程序基于某个搜索键在指定的数据库中查询.而后查询到某些对 ...

  9. Sublime10个经常使用插件

    10. Package control Package control是必装插件,全部其它的插件和主题都能够通过它来安装. 希望它能出如今正式版默认包中. 首先參照以下的教程来安装Package Co ...

  10. sql%rowcount 返回影响行数

    oracle中.返回影响行数是:If sql%rowcount 举例: update ut_calenderStatus t set t.calenderstatus=pi_flg, t.m=pi_M ...