2009-12-10 10 views
27

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

答えはhereですが、ApiDemosで見つけることができますが、見つけられないようです。

答えて

63

申し訳ありませんが、私は自分の質問に答えます。基本的に、AlertDialog.Builderを使用する代わりに、そのコンストラクタを使用して通常のDialogを作成し、デフォルトのDialogテーマの代わりに適切なテーマを使用します。これは他の誰かに役立ちます

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

希望:

だからあなたのコードは次のようになります。

+4

この場合、 dialog.setCanceledOnTouchOutside(true); は効果がありません。これをどのように処理するのですか? – amithgc

+0

これはまさに私が探していたものです。私はダイアログ作成システムと数十時間にわたりひどく書かれたチュートリアルに取り組んできましたが、あなたの1行のコードは必要なものでした。ありがとうございました! – kodi

+3

しかし、これはダイアログを全画面にしています。上記のコードを書くときにフルスクリーンにならないようにするには – AndroidDev

24

android.R.style.Theme_Translucent_NoTitleBarを使用すると、ダイアログをフルスクリーンにしたい場合に機能します。別の方法として、独自のスタイルを作成することができます。

<style 
    name="Theme_Dialog_Translucent" 
    parent="android:Theme.Dialog"> 
    <item 
     name="android:windowBackground">@null</item> 
</style> 
+0

+1これは動作しています。 Jonasbありがとうございました。 –

1

逆の背景を適用するようにビルダーに依頼することができます。私のために、PNGソースを備えたボーダーレススプラッシュスクリーンを表示するように努めました。

2

私ドロウアブルする透明ピクセルを追加し、次のコードを使用:ここで

dialog.getWindow().setBackgroundDrawableResource(R.drawable.transpix); 
33

だけで、あなたのコンテンツを表示するダイアログを取得するには、私の解決策です。

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に位置

<?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> 
+4

これは素晴らしい解決策です。ボーダーなしで同じダイアログを表示するだけで問題を完全に解決します。これは、受け入れられたものよりも適切な解決策です。 –

+0

正しい解決をお寄せいただきありがとうございます。また、dialog.setCanceledOnTouchOutside(true)を追加することもできます。アウトサイドダイアログのタッチでダイアログを閉じる。 –

7

はこの試してください:D

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

2つの境界線がある場合は、ContextThemeWrappあなたが希望通りに一つだけの境界線が表示されますされ、ER :)

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); 
0

あなたのリソースファイルには、例えばのためにという名前のXMLファイルを作成しますnull_image.xml、次の内容の:Javaコードで

<?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> 

、ダイアログウィンドウを取得し、このように、描画可能リソースとしてxmlファイルを設定します。 あなたの状況に応じて:

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

それは、それを楽しむことです。

関連する問題