‘壹’ android 多窗口模式(分屏模式)
1: 分屏模式:
该模式可以在手机上使用, 该模式将屏幕一分为二, 同时显示两个应用界面
2: 画中画模式:
该模式主要用于TV, 在该模式下视频播放的窗口可以一直在最顶端显示。(视频小窗口)
3: Freeform模式:
该模式类似于常见的桌面操作系统, 应用界面的窗口可以自由的拖动和修改大小
1:Manifest 新增属性:
2: layout 新增属性:
在freeform模式下定义的默认高度和宽度defaultWidth&&defaultHeight, freeform模式下的初始Gravity, freeform模式下最小高度和宽度minWidth&&defaultHeight。
3: 多窗口的API:
4: 分屏模式的生命周期:
很明显, 从上图的生命周期显示, 在后台将应用进入分屏模式的时候, 先执行destroy()的方法, 即在进入分屏之前, activity会被先销毁,再调用onRestoreInstanceState方法恢复数据, 回调onMultiWindowModeChanged()
我们的 APP 进入分屏模式时,在 onMultiWindowModeChanged 方法中如果有对 UI 等的操作,经过之后的自动重建就没有效果了。为了防止这种情况,需要在 AndroidManifest.xml 的 Activity 节点设置以下属性:android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
设置了这个属性,在进入分屏模式时,Activity 就不会自动重建了。
5 跨Activity对View的拖拽:
Android 4.0 开始支持activity内容的拖拽, 在多窗口的模式下,Android也实现了activity间 实现内容的拖拽。在activity间仅限于内容的拖拽, 对view的拖拽也是没办法实现的 。
‘贰’ android编程中怎么将一个按钮置于最上层
可以用相对布局RelativeLayout,给RelativeLayout一个id,
然后按钮按RelativeLayout作为父控件进行相对布局,从而置于最上层。
代码部分:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/webMainLayout"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnRegister"
android:layout_alignBottom="@id/webMainLayout"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:text="我是最上层按钮"
/>
</RelativeLayout>
注:此按钮会在最上层的右下位置 因为
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
想更改成其它位置,改变令你想处的位置基于父控件,如左上:
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
‘叁’ android 如何获取一个界面最顶层的view并处理单击事件的分发机制
android事件分发机制 就是一个触摸事件发生了,从一个窗口传递到一个视图,再传递到另外一个视图,最后被消费的过程,在android中还是比较复杂的传递流程如下:
(1) 事件从Activity.dispatchTouchEvent()开始传递,只要没有被停止或拦截,从最上层的View(ViewGroup)开始一直往下(子View)传递。子View可以通过onTouchEvent()对事件进行处理。
(2) 事件由父View(ViewGroup)传递给子View,ViewGroup可以通过onInterceptTouchEvent()对事件做拦截,停止其往下传递。
‘肆’ android如何获取最顶层窗口 csdn
{
publicStringpackageName="";
publicStringtopActivityName="";
}
(){
ActivityManagermanager=((ActivityManager)GlobalConfig.getContext().getSystemService(Context.ACTIVITY_SERVICE));
TopActivityInfoinfo=newTopActivityInfo();
if(Build.VERSION.SDK_INT>=21){
List<ActivityManager.RunningAppProcessInfo>pis=manager.getRunningAppProcesses();
ActivityManager.=pis.get(0);
if(topAppProcess!=null&&topAppProcess.importance==ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND){
info.packageName=topAppProcess.processName;
info.topActivityName="";
}
}else{
//getRunningTasks()isdeprecatedsinceAPILevel21(Android5.0)
ListlocalList=manager.getRunningTasks(1);
ActivityManager.=(ActivityManager.RunningTaskInfo)localList.get(0);
info.packageName=localRunningTaskInfo.topActivity.getPackageName();
info.topActivityName=localRunningTaskInfo.topActivity.getClassName();
}
returninfo;
}