2016-10-30 5 views
-1

WindowManagerを使用してFacebook Messengerで使用されているようなアクティビティオーバーレイを作成するにはどうすればよいですか?WindowManagerを使用してアクティビティをオーバーレイするにはどうすればよいですか?

これは私が

This is what I want

何をしたいこれは私がchatheadsバブルを持って、これまで

this is what I have so far.

最初widnowマネージャのthatsの持っているものです

params = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.MATCH_PARENT, 
      WindowManager.LayoutParams.MATCH_PARENT, 

      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
      PixelFormat.TRANSLUCENT); 


    params.gravity = Gravity.TOP | Gravity.LEFT; 
    params.x = 0; 
    params.y = 100; 

これが私の活動のダイアログの私が持っているコード

WindowManager.LayoutParams params = getWindow().getAttributes(); 

    params.alpha = 1.0f; // lower than one makes it more transparent 
    params.dimAmount = 0f; // set it higher if you want to dim behind the window 
    params.type = WindowManager.LayoutParams.TYPE_PHONE; 
    params.flags = WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON|    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON; 

    params.x = 0; 
    params.y = (int) (height - dpToPx(this,40)); 

    getWindow().setAttributes(params); 

これは私のマニフェストでの活動である:ここでは

<activity 
     android:name=".activity.popup" 
     android:configChanges="orientation|screenSize" 
     android:excludeFromRecents="true" 
     android:label="@string/app_name" 
     android:launchMode="singleInstance" 
     android:taskAffinity="" 
     android:theme="@style/Theme.FloatingWindow.Popup" 
     android:windowSoftInputMode="adjustPan|adjustResize" 
     tools:ignore="ExportedActivity" > 
    </activity> 

は私が作ったスタイルファイルで@style/Theme.FloatingWindow.Popupスタイルです。

<style name="Theme.FloatingWindow.Popup" parent="@style/Theme.AppCompat.Light" > 
    <item name="windowNoTitle">true</item> 
    <item name="windowActionBar">false</item> 
    <item name="android:windowIsFloating">false</item> 
    <item name="android:windowSoftInputMode">adjustResize</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:colorBackgroundCacheHint">@null</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowActionModeOverlay">true</item> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowFrame">@null</item> 
    <item name="android:windowCloseOnTouchOutside">false</item> 
    <item name="android:windowAnimationStyle">@null</item> 
    <item name="android:backgroundDimEnabled">false</item> 

</style> 

答えて

0

それは私のために働いてこれを使用してください。

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, 
       WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, 
       PixelFormat.TRANSLUCENT); 
0

TYPE_SYSTEM_ALERTビューは、他のすべてのアプリケーションおよびアクティビティの上に表示されます。したがって、そのビューの上にアクティビティを表示することはできません。

目的を達成するには、アクティビティを使用する代わりにチャットバブルを追加したのと同じ方法で、チャットビューをウィンドウマネージャに追加する必要があります。

例: -

WindowManager.LayoutParams dialogParams = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.MATCH_PARENT, 
        WindowManager.LayoutParams.WRAP_CONTENT, 
        WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, 
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
        PixelFormat.TRANSLUCENT); 
LayoutInflater inflater = LayoutInflater.from(context); 
View activityView = inflater.inflate(R.layout.activity_layout, null); 
windowManager.addView(activityView, dialogParams); 

別の解決策: -

あなたはちょうどあなたがあなたのチャットのアクティビティを表示する際、時間的にシステムアラートの表示を削除し、そのチャットを行うことができますが、それを作るために活動のレイアウトの一部を泡上記の最初の画像のように見えます。

その後、システムアラートビューを使用する必要があるときに追加することができます(アクティビティのonPauseなどのイベントにユーザーを追加できます)。

関連する問題