2011-11-08 6 views
20

Iダイアログに示される活性を有する:境界がなくなったDialogからborderを削除するには?

<resources> 
    <style name="ActivityDialog" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowBackground">@null</item> 
    <item name="android:windowFrame">@null</item> 
</style> 

:境界と丸い角を除去するために

は、私はこれを試みましたしかし、悲しいことにダイアログのまわりのマージンも。

答えて

36

境界線、丸い角および余白はすべてandroid:windowBackgroundで定義されます。 (パラメータandroid:windowFrameは既にTheme.Dialogスタイルで@nullに設定されているので、再び@nullにそれを設定すると効果がありません。)

あなたが適切android:windowBackgroundを変更する必要が境界線とのラウンドコーナーを除去するために。 Theme.Dialogスタイルでは、@android:drawable/panel_backgroundに設定されています。あなたは9・パッチPNGを見ることができるように

enter image description here

ダイアログテーマのマージン、ボーダーやラウンドコーナーを定義しています。どちらが(この1つはあるhdpi版)を次のようになり、9パッチ引き出し可能です。枠線と角を削除するには、適切なドロウアブルを作成する必要があります。シャドウグラデーションを維持したい場合は、新しい9パッチドローラブルのセット(各dpiに1つのドロウアブル)を作成する必要があります。影のグラデーションが必要ない場合は、shape drawableを作成することができます。

必要なスタイルは、次にある:

<style name="ActivityDialog" parent="@android:style/Theme.Dialog">  
    <item name="android:windowBackground">@drawable/my_custom_dialog_background</item>    
</style> 
+0

どうもありがとう!私は背景イメージがマージンを定義していることを知らなかった。 – timoschloesser

+0

plz、私にこの9パッチの画像を送ってもらえますか?私はそれを修正しようとしますが、希望がなければ、黒い線を削除しても影の効果が失われます。 –

+0

9パッチ画像はAndroidソースからのものです。 9パッチのドロワブルの黒い線は理由があるため、9パッチ画像の詳細についてはこちら[http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch )。 – Tomik

1

私は他の可能性のあるビットの周りに再生が、固定されたマージンと9パッチを使用し、層リスト描画可能でオフセット、従ってマージンを定義することを可能にしていることが判明しましたその囲まれたドローアブルの周りに、これは私の仕事:

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

    <item 
     android:drawable="@drawable/my_custom_background" 
     android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp"> 
    </item> 

</layer-list> 

、その後、あなたは「アンドロイド:windowBackground」:これを使用することができます

<style name="ActivityDialog" parent="@android:style/Theme.Dialog">  
    <item name="android:windowBackground">@drawable/my_custom_layer_background</item>    
</style> 
012カスタム背景描画可能を作成し、特別なスタイルを追加することなく、
66

ちょうどあなたのコードに1行を追加します。

dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); 
+0

優雅な解決策。私は透明ではなく作成したカスタムdrawableにdrawableリソースを設定しました。 Thanx – BLOB

+0

ありがとうございました。ニースの解決策。 – Dipali

+0

複数のクラスで使用する必要がない場合は、良いソリューションです。 – CiDsTaR

0

別のオプション

リソース値\ \のstyles.xml

<style name="MessageDialog" parent="android:Theme.Holo.Light.Dialog"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
</style> 

AlertDialog.Builder builder = new AlertDialog.Builder(Activity, Resource.Style.MessageDialog);    

これらのステートメントは、次のコードから抜粋されています

public class MessageAlertDialog : DialogFragment, IDialogInterfaceOnClickListener 
{ 
    private const string DIALOG_TITLE = "dialogTitle"; 
    private const string MESSAGE_TEXT = "messageText"; 
    private const string MESSAGE_RESOURCE_ID = "messageResourceId"; 

    private string _dialogTitle; 
    private string _messageText; 
    private int _messageResourceId; 

    public EventHandler OkClickEventHandler { get; set; } 

    public static MessageAlertDialog NewInstance(string messageText) 
    { 
     MessageAlertDialog dialogFragment = new MessageAlertDialog(); 

     Bundle args = new Bundle(); 
     args.PutString(MESSAGE_TEXT, messageText); 

     dialogFragment.Arguments = args; 

     return dialogFragment; 
    } 

    public static MessageAlertDialog NewInstance(string dialogTitle, string messageText) 
    { 
     MessageAlertDialog dialogFragment = new MessageAlertDialog(); 

     Bundle args = new Bundle(); 
     args.PutString(DIALOG_TITLE, dialogTitle); 
     args.PutString(MESSAGE_TEXT, messageText); 

     dialogFragment.Arguments = args; 

     return dialogFragment; 
    } 

    public static MessageAlertDialog NewInstance(int messageResourceId) 
    { 
     MessageAlertDialog dialogFragment = new MessageAlertDialog(); 

     Bundle args = new Bundle(); 
     args.PutInt(MESSAGE_RESOURCE_ID, messageResourceId); 

     dialogFragment.Arguments = args; 

     return dialogFragment; 
    }   

    public override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 

     _dialogTitle = Arguments.GetString(DIALOG_TITLE); 
     _messageText = Arguments.GetString(MESSAGE_TEXT); 
     _messageResourceId = Arguments.GetInt(MESSAGE_RESOURCE_ID); 
    } 

    public override Dialog OnCreateDialog(Bundle savedInstanceState) 
    { 
     base.OnCreateDialog(savedInstanceState); 

     AlertDialog.Builder builder = new AlertDialog.Builder(Activity, Resource.Style.MessageDialog);    

     if (_dialogTitle != null) 
     { 
      builder.SetTitle(_dialogTitle); 
     } 

     if (_messageText != null) 
     { 
      builder.SetMessage(_messageText); 
     } 
     else 
     { 
      View messageView = GetMessageView(); 
      if (messageView != null) 
      { 
       builder.SetView(messageView); 
      } 
     } 

     builder.SetPositiveButton("OK", this); 
       //.SetCancelable(false);    

     this.Cancelable = false; 
     AlertDialog dialog = builder.Create(); 
     dialog.SetCanceledOnTouchOutside(false); 
     //dialog.Window.SetBackgroundDrawableResource(Android.Resource.Color.Transparent); 

     return dialog;    
    } 

    private View GetMessageView() 
    { 
     if (_messageResourceId != 0) 
     { 
      View messageView = Activity.LayoutInflater.Inflate(_messageResourceId, null); 

      return messageView; 
     } 

     return null; 
    } 

    void IDialogInterfaceOnClickListener.OnClick(IDialogInterface di, int i) 
    { 
     OkClickEventHandler?.Invoke(this, null); 
    } 
} 

使用

public static void ShowMessageAlertDialog(FragmentManager fragmentManager, string dialogTitle, string messageText, EventHandler okClickEventHandler) 
{ 
    MessageAlertDialog msgAlertDialog = MessageAlertDialog.NewInstance(dialogTitle, messageText); 
    msgAlertDialog.OkClickEventHandler += okClickEventHandler; 

    msgAlertDialog.Show(fragmentManager, "message_alert_dialog"); 
} 
関連する問題