web-dev-qa-db-ja.com

Androidフチなしダイアログ

AlertDialog.Builderを使用してAlertDialogを作成しましたが、ダイアログの境界線が画面上で占めるスペースが多すぎます。境界線を削除するにはどうすればよいですか?別のアクティビティを使用して、背景が透明なダイアログをエミュレートしようとしましたが、ダイアログは繰り返し使用され、毎回新しいアクティビティを作成すると、かなりの量の遅延が生じます。

here からの回答には、ApiDemosで見つけることができると記載されていますが、見つけられないようです。

28
kwogger

さて、私は自分の質問に答えます。基本的に、AlertDialog.Builderを使用する代わりに、コンストラクターを使用して通常のDialogを作成し、デフォルトのDialogテーマの代わりに適切なテーマを使用します。

したがって、コードは次のようになります。

Dialog dialog = new Dialog(this, Android.R.style.Theme_Translucent_NoTitleBar);

これが他の誰かを助けることを願っています。

64
kwogger

これが私の解決策です。あなたのコンテンツだけを表示するダイアログを取得します。

    Dialog dialog = new Dialog(this,R.style.ThemeDialogCustom);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    //you can move the dialog, so that is not centered
    // dialog.getWindow().getAttributes().y = 50; //50 should be based on density

    dialog.setContentView(yourLinearLayout);
    dialog.setCancelable(true);
    //dialog.setOnCancelListener(cancelListener);
    dialog.show();

themes.xml //プロジェクト/ res/valuesにあります

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="ThemeDialogCustom">
    <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:windowBackground">@color/transparent_color</item>
    <item name="Android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="Android:colorBackgroundCacheHint">@null</item>
   </style>
</resources>

colors.xml //そこにもあります

<?xml version="1.0" encoding="utf-8"?>
<resources>
       <color name="transparent_color">#00000000</color>
</resource>
33
jokernk

ダイアログを全画面表示にする場合は、Android.R.style.Theme_Translucent_NoTitleBarを使用できます。別の方法は、次のように独自のスタイルを作成することです。

<style
    name="Theme_Dialog_Translucent"
    parent="Android:Theme.Dialog">
    <item
        name="Android:windowBackground">@null</item>
</style>
24
jonasb

これを試してください:D

 Dialog popUpView= new Dialog(this);
 popUpView.getWindow().setBackgroundDrawable(new ColorDrawable(0));
7
Ishanssi

2つの境界線がある場合は、ContextThemeWrapperを使用する必要があります。これにより、境界線が1つだけ表示されます:)

ContextThemeWrapper wrapper = new ContextThemeWrapper(this, Android.R.style.Theme_Holo);
final LayoutInflater inflater = (LayoutInflater) wrapper.getSystemService(LAYOUT_INFLATER_SERVICE);
AlertDialog.Builder builder = new AlertDialog.Builder(wrapper);
2
douarbou

透明ピクセルをドローアブルに追加し、次のコードを使用しました:

dialog.getWindow().setBackgroundDrawableResource(R.drawable.transpix);
2
TomBombadil

逆のバックグラウンドを適用するようビルダーに要求できます。私のために働いて、pngソースのフチなしスプラッシュスクリーンを表示しました。

1
bung_julio

リソースファイルに、次のような名前のxmlファイルを作成します。 null_image.xml、以下のコンテンツ:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >

<solid Android:color="#0000" />

<size
    Android:height="1dp"
    Android:width="1dp" />

 </shape>

Java=コードで、ダイアログウィンドウをフェッチし、次のようにxmlファイルをドローアブルリソースとして設定します。コンテキストに応じて:

Dialog dialog = new Dialog(getContext());
Window window = dialog.getWindow();
window.setBackgroundDrawableResource(R.drawable.null_image);

それでお楽しみください。

0
greenspand