写真に示すように、カスタムダイアログの黒い背景を削除したいです。黒い背景は、アプリの背景ではなく、ダイアログからのものであると確信しています。
;
アラートダイアログコード
public class MyAlertDialog extends AlertDialog {
public MyAlertDialog(Context context)
{
super(context);
}
public MyAlertDialog(Context context, int theme)
{ super(context, theme); }
}
アクティビティコード
public void showMyDialogOK(Context context, String s, DialogInterface.OnClickListener OkListener) {
MyAlertDialog myDialog = new MyAlertDialog(context, R.style.MyDialog2);
myDialog.setTitle(null);
myDialog.setMessage(s);
myDialog.setButton(DialogInterface.BUTTON_POSITIVE ,"Ok", OkListener);
myDialog.show();
}
スタイル
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="@Android:style/Theme.NoTitleBar.Fullscreen">
<item name="Android:alertDialogStyle">@style/AlertDialog</item>
</style>
<style name="MyTheme2" parent="@Android:style/Theme.Black">
<item name="Android:alertDialogStyle">@style/AlertDialog</item>
</style>
<style name="AlertDialog">
<item name="Android:fullDark">@null</item>
<item name="Android:fullBright">@null</item>
<item name="Android:topDark">@drawable/popup_top_dark</item>
<item name="Android:topBright">@null</item>
<item name="Android:centerBright">@null</item>
<item name="Android:centerDark">@drawable/popup_center_dark</item>
<item name="Android:centerMedium">@null</item>
<item name="Android:bottomDark">@null</item>
<item name="Android:bottomBright">@null</item>
<item name="Android:bottomMedium">@drawable/popup_bottom_medium</item>
</style>
<style name="MyDialog2" parent="@Android:Theme.Dialog">
<item name="Android:windowBackground">@null</item>
<item name="Android:buttonStyle">@style/CustomButton</item>
</style>
<style name="CustomButton" parent="@Android:style/Widget.Button">
<item name="Android:background">@drawable/button_stateful</item>
</style>
</resources>
画像リソース
popup_center_dark.9.png
popup_bottom_medium.9.png
popup_top_dark.9.png
public MyAlertDialog(
Context context,
int theme
) extends AlertDialog {
super(context, theme);
getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
}
Sonehow getWindow().setBackgroundDrawable()
はAlertDialog
で動作しませんでした。 Dialogを使用して、より簡単な解決策を見つけました。ここに私のコードがあります-
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
dialog.setContentView(R.layout.popup_window);
dialog.show();
これを試して:
myDialog.getWindow().clearFlags(LayoutParams.FLAG_DIM_BEHIND);
この問題に対して他の多くの解決策を試した後、私のために働いたのは次のとおりです:
<style name="translucentDialog" parent="Android:Theme.Holo.Dialog">
<item name="Android:windowBackground">@Android:color/transparent</item>
</style>
そして、このテーマを使用するようにダイアログを設定します。
次の方法は私のために働いた:
getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
//style.xmlのコードスタイル:
<style name="translucentDialog" parent="Android:Theme.Holo.Dialog">
<item name="Android:windowBackground">@Android:color/transparent</item>
</style>
//アクティビティ:スタイルをダイアログに設定:
Dialog dialogconf = new Dialog(TreeAct.this, R.style.translucentDialog);
dialogconf.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialogconf.setContentView(R.layout.dialog_layout);
次のようなxmlレイアウトを作成し、dialog(dialog.xml)のレイアウトに設定できます。
<?xml version="1.0" encoding="utf-8"?>
<ScrollView Android:id="@+id/ScrollView01"
Android:layout_width="fill_parent" Android:layout_height="fill_parent"
xmlns:Android="http://schemas.Android.com/apk/res/Android" style="@style/white_background_bl_aatharv">
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical" Android:layout_width="fill_parent"
Android:layout_height="wrap_content" Android:scrollbars="vertical"
Android:scrollbarAlwaysDrawVerticalTrack="true" Android:id="@+id/instructions_view">
<TextView Android:id="@+id/TextView01" Android:layout_width="wrap_content"
Android:layout_height="wrap_content" Android:textColor="#FFFFFF"
Android:text="text here " />
</LinearLayout>
</ScrollView>
アラートダイアログでレイアウトを設定するコードは次のとおりです:
AlertDialog alert = cndtnsbuilder.create();
alert.setView(LayoutInflater.from(
currentactivity.this).inflate(
R.layout.dialog, null));
alert.show();
単に親ダイアログを変更します。
黒い背景付き
<style name="MyDialog2" parent="@Android:Theme.Dialog">
黒い背景なし
<style name="MyDialog2" parent="@Android:style/Theme.DeviceDefault.Light.Dialog">
背景色を削除するには、レイアウト上で、背景を@nullに設定するだけです
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@null">
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
Alertdialog.Builderに基づいたカスタムダイアログでも同じ問題が発生し、タイトルに黒い背景が表示されていましたそして私が使用するときのボディ:
builder.setView(rootView)
.setTitle(dialog_title)
.setMessage(dialog_mesg)
ソリューションは1-事前定義されたアラートダイアログビルダーのテーマのいずれかを使用します。
THEME_DEVICE_DEFAULT_LIGHTは私に最適です
2-デフォルトのダイアログボタン(ポジティブ/ネガティブ)の色を希望の色に設定します。
Button b = mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
Button d = mAlertDialog.getButton(AlertDialog.BUTTON_NEGATIVE);
b.setTextColor(ContextCompat.getColor(getActivity(), R.color.primary));
d.setTextColor(ContextCompat.getColor(getActivity(), R.color.primary));
テーマオプションの詳細とトリックについては、以下のブログ投稿をご覧ください。 http://blog.supenta.com/2014/07/02/how-to-style-alertdialogs-like-a-pro/ =
oreo 8.1でテスト済み