2017-04-13 3 views
0

に追加これは私のレイアウトファイルのとき:これは私がSystem alert windowsとしてそれを追加する方法ですボタンウィンドウマネージャ

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:background="@android:color/transparent" 
android:orientation="vertical"> 

<SurfaceView 
    android:id="@+id/mediaView" 
    android:layout_width="300dp" 
    android:layout_height="200dp" 
    android:background="@android:color/transparent" /> 

<Button 
    android:id="@+id/btnClose" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="close" /> 

</FrameLayout> 

// hiển thị floating view 
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, 
      PixelFormat.TRANSLUCENT); 

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

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
    windowManager.addView(abovedFrameLayout, params); 

ここに私の問題は、それに関係なくどのような私です試してみてください、ボタンは決して示されません。常にSurfaceViewの下にあります。私は:mSurfaceView.setZOrderMediaOverlay(false);mSurfaceView.setZOrderOnTop(false);とテストしましたが、何も動作していないようです。提案はありますか?ありがとう。

+0

線形レイアウトをFramelayoutの代わりに –

+0

@ MCZ私は線形レイアウトを使用しましたが、それでも彼はサーフェイスビューがボタンと重なっています。 –

+0

私はスムージングされたコードを提出してくれることを願っています –

答えて

1

あなたはこのコードをテストし、surfaceviewerとボタンが のXmlのレイアウトをオーバーラップされていませんRelativeLayout

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <SurfaceView 
     android:id="@+id/mediaView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 


    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="300dp" 
     android:layout_gravity="bottom" 
     android:padding="20dp"> 

     <Button 
      android:id="@+id/btnClose" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="close" /> 

    </RelativeLayout> 

</FrameLayout> 
+0

私はここでは何も見かけません。 –

1

を使用する必要があり、これを試してみてください:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@android:color/transparent" 
    android:orientation="vertical"> 

    <Button 
     android:id="@+id/btnClose" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="close" /> 

    <SurfaceView 
     android:id="@+id/mediaView" 
     android:layout_width="300dp" 
     android:layout_height="200dp" 
     android:background="@android:color/transparent" /> 

</LinearLayout> 

Acitivy:あなたが使用することができます

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
     WindowManager.LayoutParams.WRAP_CONTENT, 
     WindowManager.LayoutParams.WRAP_CONTENT, 
     WindowManager.LayoutParams.TYPE_TOAST, 
     WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, 
     PixelFormat.TRANSLUCENT); 

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

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

ImageView v = new ImageView(surfaceview.this); 
v.setBackgroundResource(R.drawable.nimbledroid); 
windowManager.addView(v, params);