『壹』 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;
}