Android Dialog – закругленные углы и прозрачность

Я пытаюсь создать собственное диалоговое окно Android с закругленными углами. Мои текущие попытки дали мне этот результат.

Закругленный угол диалога

Как вы можете видеть, углы округлены, но он оставляет белый угол неподвижным.

Ниже находится xml, который я вложил в папку с возможностью рисования, чтобы создать синий диалог с красной рамкой с закругленными углами.

<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="@color/transparent_black" /> <corners android:radius="@dimen/border_radius"/> </shape> </item> <item android:left="@dimen/border_width" android:right="@dimen/border_width" android:top="@dimen/border_width" android:bottom="@dimen/border_width" > <shape android:shape="rectangle"> <solid android:color="@color/blue" /> <corners android:radius="@dimen/border_radius"/> </shape> </item> </layer-list> 

Ниже представлена ​​схема диалога.

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" style="@style/fill" android:orientation="vertical" android:layout_margin="@dimen/spacing_normal" android:padding="@dimen/spacing_normal" android:background="@drawable/border_error_dialog" > <RelativeLayout style="@style/block" android:layout_gravity="center" > <ImageView android:id="@+id/imageView1" style="@style/wrap" android:layout_alignParentLeft="true" android:layout_centerHorizontal="true" android:contentDescription="@string/content_description_filler" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/textView1" style="@style/error_text" android:layout_centerVertical="true" android:layout_toRightOf="@+id/imageView1" android:text="@string/error_login" /> </RelativeLayout> <Button android:id="@+id/button1" style="@style/wrap" android:layout_gravity="center" android:text="Button" /> </LinearLayout> 

И ниже – действие, в котором я создаю диалог.

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button b1 = (Button) findViewById(R.id.button1); b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(MainActivity.this); View child = getLayoutInflater().inflate(R.layout.dialog_custom_tom, null); alertDialogBuilder.setView(child); AlertDialog alertDialog = alertDialogBuilder.create(); alertDialog.show(); } }); } 

Solutions Collecting From Web of "Android Dialog – закругленные углы и прозрачность"

Единственное решение, которое я нашел, здесь . Используйте диалоговое окно вместо AlertDialog и установите прозрачный фон:
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
Поэтому вы не можете использовать построитель. Но вы можете использовать новый Dialog () также в обратном вызове onCreateDialog для DialogFragment, если вы следуете лучшим рекомендациям.

Это работает и для Gingerbread.

Кроме того, слоистый drawable можно упростить до одной формы с элементом xml <stroke> для границы.

У меня была аналогичная проблема, когда был сделан диалог, расширяющий DialogFragment, и чтобы исправить это:

 dialog.setStyle(DialogFragment.STYLE_NO_FRAME, 0); 

Как это:

 public class ConfirmBDialog extends DialogFragment { public static ConfirmBDialog newInstance() { ConfirmBDialog dialog = new ConfirmBDialog(); Bundle bundle = new Bundle(); dialog.setArguments(bundle); dialog.setStyle(DialogFragment.STYLE_NO_FRAME, 0); return dialog; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.confirm_dialog, container, true); getDialog().setCanceledOnTouchOutside(true); return view; } 

}

Надеюсь это поможет.

Просто попробуй

 myDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 

Используйте 9-патч PNG с прозрачностью в этих углах.

После долгого времени, когда я боролся с этим и некоторыми другими проблемами, с которыми я столкнулся, я нашел довольно краткий ответ, который работает на API <11:

https://stackoverflow.com/a/25887869/855597

В вашем java-файле сохраняйте код ниже и измените имя макета

 View mView =LayoutInflater.from(mContext).inflate(R.layout.layout_pob,null); alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 

Приведенный ниже код решил проблему

 MyDialog mydialog = new MyDialog(this, "for testing", new myOnClickListener() { @Override public void onPositiveButtonClick() { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), "I am positive button in the dialog", Toast.LENGTH_LONG).show(); } @Override public void onNegativeButtonClick() { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), "I am negative button in the dialog", Toast.LENGTH_LONG).show(); } }); // this will remove rectangle frame around the Dialog mydialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); mydialog.show(); 

Благодарю, Нагендра