web-dev-qa-db-ja.com

Android:ダイアログをテーマとした透明なアクティビティを作成する方法

ここでの最初の目標はモーダルダイアログでしたが、Androidはこのタイプのダイアログをサポートしていませんでした。あるいは、ダイアログをテーマにしたアクティビティを構築するとうまくいくかもしれません。
これがコードです、

public class DialogActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {

    setTheme(Android.R.style.Theme_Dialog);

    super.onCreate(savedInstanceState);

    requestWindowFeature (Window.FEATURE_NO_TITLE);

    Button yesBtn = new Button(this);
    yesBtn.setText("Yes");
    yesBtn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            DialogActivity.this.finish();

        }

    });

    this.setContentView(yesBtn);
}

しかし、背景は常に真っ黒で、本当に混乱していました。人々は同じ問題を抱えていました
http://code.google.com/p/Android/issues/detail?id=4394
ユーザーにとってダイアログのように見せたいだけです。では、このDialogActivityを透明にして下にある画面を覆わないようにするにはどうすればよいですか?
ありがとうございます。

これは私がスタイルを作成した方法でした

<style name="CustomDialogTheme" parent="Android:Theme.Dialog">
    <item name="Android:windowBackground">@Android:color/transparent</item>
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:windowFullscreen">false</item>
</style>
18
fifth

これで透明ダイアログを作成できます。

public class DialogActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
        alertDialog.setTitle(" ");
        alertDialog.setMessage("");
        alertDialog.setIcon(R.drawable.icon);
        alertDialog.setButton("Accept", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {                
            }
        });
        alertDialog.setButton2("Deny", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });
        alertDialog.show();
    }
}

この後、マニフェストでアクティビティを定義するAndroidManifest.xmlに行を追加します。

Android:theme="@Android:style/Theme.Translucent.NoTitleBar"
23
user824330

私が見つけた最も簡単な方法は、AndroidManifestでアクティビティのテーマを_Android:theme="@Android:style/Theme.Holo.Dialog"_に設定し、次にアクティビティのonCreateメソッド呼び出しでgetWindow().setBackgroundDrawable(new ColorDrawable(0));を設定することです

13
Drew Leonce

ここですべての回答に追加すべきことは1つだけです。動作のような完全なダイアログを実現するには、ウィンドウレイアウトパラメータを変更してダイアログの位置を変更できます。

WindowManager.LayoutParams params = getWindow().getAttributes(); 
params.x = ...;
params.y = ...;
params.width = ...;
params.height = ...;

this.getWindow().setAttributes(params);

同様の手法を使用して、Tooleap SDKでフローティングアクティビティ効果を実現しました。

floating calculator

6
Danny
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));

およびimport Android.graphics.drawable.ColorDrawable; on top :)

3
Faakhir

@ user824330の回答を簡単に更新します。 AlertDialog.Builderクラスがあるので、適切に使用しないのはなぜですか?多くのメソッドが廃止されました。最新のコードは次のようになります。

public class DialogActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("title")
       .setMessage("message")
       .setIcon(R.drawable.ic_launcher)
       .setPositiveButton("Yes", new OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int which) {}
       })
       .setNegativeButton("No", new OnClickListener() {
               @Override
               public void onClick(DialogInterface dialog, int which) {}
       });

    final AlertDialog dialog = builder.create();
    dialog.show();
}

}

3
Sebastiano

DialogFragmentを作成し、setcontentviewを使用してダイアログをカスタマイズする方がよいでしょう。

http://developer.Android.com/reference/Android/app/DialogFragment.html

0
Bryan