2017-10-14 59 views
1

Androidでダイアログウィンドウの枠線を追加しようとしています。ダイアログボックスに境界線を追加するには、以下の行をandroidのダイアログウィンドウに枠を追加する

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:left="5dp" 
     android:right="5dp" 
     android:bottom="5dp" 
     android:top="5dp"> 
    <shape android:shape="rectangle"> 
     <solid android:color="#ffbf80" /> 
     <corners android:radius="30dp" /> 
     <padding 
     android:left="1dp" 
     android:top="1dp" 
     android:right="1dp" 
     android:bottom="1dp" /> 
    </shape> 
    </item> 
</layer-list> 

を描画可能なを使用して、ダイアログウィンドウに丸みを帯びた角を追加して、私は

<shape android:shape="rectangle"> 
    <solid 
    android:color="#ffbf80" /> 
    <stroke android:color="#ff3300" android:width="2dp"/> 
    <corners 
    android:radius="30dp" /> 
    <padding 
    android:left="1dp" 
    android:top="1dp" 
    android:right="1dp" 
    android:bottom="1dp" /> 
</shape> 

以下のようにストローク要素を追加することで試してみました。しかし、これは作成されますテキストビュー、アイコン、ボタンのようなダイアログ内のすべての要素の周りの境界。私はちょうど窓の輪郭の境界線をしたい。私はAlertDialog.Builderを使用してJavaコードで警告ダイアログを作成した

myDialogBuilder=new AlertDialog.Builder(new 
ContextThemeWrapper(getActivity(), 
R.style.CustomDialog)) 
.setTitle(title.getText().toString()) 
.setMessage(myText) 
.setPositiveButton("Done", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) 
       { 
       getDialog().dismiss(); 
       } 
       }); 

myDialog=myDialogBuilder.create(); 

myDialog.setOnShowListener(new DialogInterface.OnShowListener() { 
       @Override 
       public void onShow(DialogInterface dialog) { 
        Window view=((AlertDialog)dialog).getWindow(); 
        view.setBackgroundDrawable(new 
        ColorDrawable(Color.TRANSPARENT)); 
       ... 
       } 
}); 

私は、ダイアログボックスのための私のstyles.xmlに以下の持っている

<style name="CustomDialog" parent="@style/ThemeOverlay.AppCompat.Dialog"> 
    <item name="android:backgroundDimEnabled">true</item> 
    <item name="android:background">@drawable/dialog_bg</item> 
    <item name="android:textColorPrimary">@color/my_textcolor</item> 
</style> 

は私が理解して助けてくださいアラートダイアログの境界線が表示されるように変更する必要があります。

おかげ

答えて

1

コードで次の変更を加えて、警告ダイアログの境界問題を解決できました。

代わりにダイアログを作成するときにテーマを指定するので、私はdialog.setOnShowListener()にダイアログウィンドウに描画可能リソースを追加

Window view=((AlertDialog)dialog).getWindow(); 
view.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
// to get rounded corners and border for dialog window 
view.setBackgroundDrawableResource(R.drawable.dialog_bg); 

私はちょうど私の警告ダイアログで、タイトル、メッセージと1つのボタンを必要とします。だから私はそれを作成する標準のAlertDialog.Builderの方法を使用していますが、カスタムレイアウトファイルを使用してビューを設定することもできます。

0

もちろん、それは非常に多くの作業を必要とする、私は私のアプリでコーナーダイアログを四捨五入しているが、私はカスタムレイアウトではなく、標準AlertDialogでカスタムダイアログを使用します。

  • でのstyles.xmlであなたのMyDialogStyleを定義します。属性の追加]ダイアログレイアウトXMLのルートアイテムで
    <item name="android:background">@drawable/my_rounded_background</item>

  • :ダイアログクラスで
    style="@style/MyDialogStyle"

  • をのonCreate追加:

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

+0

ご回答ありがとうございます。私はすでに述べた3つの事柄を追加しましたが、唯一の違いは、カスタムレイアウトを使用する代わりに、警告ダイアログをコードで作成していることです。なぜそれは働いていないのですか? – Sri

+0

"myDialogBu​​ilder = new AlertDialog.Builder(..)"をまだ使用している場合、カスタムダイアログを作成していないため、カスタムダイアログ用に作成したクラスは使用していないため何もしません。これを "myDialog = new MyCustomDialog()"またはカスタムダイアログクラスを呼び出したものに変更します。カスタムダイアログを作成するとは、Dialog Androidクラスを拡張するJavaクラスを作成することを意味します。 –

+0

私はapi 11以上でAlertDialog.Builderを使ってカスタムスタイルでアラートダイアログを作成できると思います。このリンクhttps:// stackoverflowを確認してください。com/questions/14770400/android-alertdialog-styling。 アラートダイアログの背景色と丸みのあるコーナーを設定できましたが、動作していないのはそれだけです。 Drawableファイルにストロークを追加すると、アラートダイアログにタイトル、ボタン、メッセージなどが丸く表示されます。アラートダイアログボックスの輪郭線は1つだけ必要です。 – Sri

関連する問題