44

バックグラウンド

contact+ appで発生するのと同様に、現在の画面で何が起こっているかを説明する現在のアクティビティの上にレイヤーを配置しようとしています。

これにはいくつかの解決策があることを知っています(showCaseライブラリやsuperToolTipsライブラリなど)。また、ビューを作成してアクティビティのウィンドウに追加することで上に設定できることも知っていますが、全体を配置する必要があります上部のダイアログ レイヤー。

問題

何を試しても、それぞれのソリューションが必要な方法で機能しません。

要するに、私が必要とするのは次のとおりです。

  • 全画面ダイアログ。

  • アクション バー、通知バー、背後のアクティビティのコンテンツに (視覚的でも論理的でもない) 変更はありません。つまり、ダイアログの背後にあるものはすべて、ダイアログが表示される直前に表示されたものと同じままです。

  • ダイアログに使用するビューを除いて、通常は表示する必要があります。

私が試したこと

悲しいことに、私はいつも必要なものの一部しか持っていません。

ここに私のコードがあります:

スタイル.xml:

<style name="full_screen_dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    </style>

MainActivity.java:

...
final Dialog dialog = new Dialog(this, R.style.full_screen_dialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.floating_tutorial);
dialog.getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
dialog.getWindow().setFormat(PixelFormat.TRANSLUCENT);
dialog.show();

このコードは、アクティビティの上にレイアウトを配置しますが、悲しいことに、設定したにもかかわらず透明度がありません。私が使用したレイアウトは非常にシンプルなので、投稿しません。

質問

私は何が欠けていますか?コードを修正するにはどうすればよいですか?

ダイアログを透明でフルスクリーンにし、アクションバーと通知バーを変更しないようにするにはどうすればよいですか。


ワーキングソリューション

編集:良い解決策を見つけた後、ここに作業コードがあります:

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final Dialog dialog = new Dialog(this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.floating_tutorial);
    final Window window = dialog.getWindow();
    window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.show();
}
4

2 に答える 2

55

ダイアログの背景色を変更するだけです:

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

編集:

これにより、薄暗い効果が防止されます。

dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
于 2013-08-20T14:53:01.167 に答える
3

これを追加するだけで、本当にうまくいきます!

<item name="android:windowIsTranslucent">true</item>
        <item name="android:windowCloseOnTouchOutside">true</item>
        <item name="android:windowBackground">@android:drawable/alert_dark_frame</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:backgroundDimEnabled">false</item>
于 2015-06-30T03:34:22.543 に答える