Android界面相关的类

原创 2015年07月10日 18:31:11

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、Handler和HandlerThread的区别 2、AnscTask的运用 4、Activity的四种启动模式 5、fragment的生命周期,Activity的生命周期 6、broad...

Android界面开发的相关知识

一、 界面元素   1. 窗口:Activity   应用程序中每个屏幕显示都通过继承和扩展基类Activity实现   分类:基本Activity,带内容的Activity(如ListActi...

android中通过拨号键打开contacts相关界面的流程分析

       首先拨号键属于全局策略管理,所以在PhoneWindowManager中对KEYCODE_CALL事件做了对应的处理,如果按下KEYCODE_CALL时,话机处于RINGING状态,则通...

Android界面开发的相关知识

一、 界面元素   1. 窗口:Activity   应用程序中每个屏幕显示都通过继承和扩展基类Activity实现   分类:基本Activity,带内容的Activity(如ListActi...

android游戏开发之我的小小游戏2——连连看游戏2之绘制基本的界面及触摸相关

通过PieceManager获得的一个9*9的二维方块Piece类的数组,其中我们值绘制1-8的格子,因为最外层的格子我们将会用来,画线,效果如下图 现在我们可以通过这个数组来绘制基本的界面...

Android 7.0 插卡后APN信息的加载流程、UI界面编辑APN的流程及Android中APN配置相关的漏洞

本篇博客主要分析了APN相关的常用流程,以及实际存在的APN相关的漏洞。

QT学习篇(三)总结界面设计相关类

一、问题:这几天开始学习使用QT设计一款简单的代码编辑器,目的主要是学习一些类的使用,然后逐渐完善编辑器的功能,但是模仿其他编辑器的时候,总是不知道同样的窗口或者功能该用什么类,想了想该知道些软件设计...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android界面相关的类
举报原因:
原因补充:

(最多只允许输入30个字)