Android Дыялог - Закругленыя куты і празрыстасць

Я спрабую зрабіць карыстацкі АНДРОІД дыялог з закругленымі кутамі. Мае цяперашнія спробы далі мне гэты вынік.

rounded corner dialog

Як вы можаце бачыць, куты закруглены, але ён пакідае белы кут цэлы.

Ніжэй XML, які я паставіў у выцяжцы тэчкі, каб стварыць сіні дыялог з чырвонай рамкай з закругленымі кутамі.

<?xml version="1.0" encoding="utf-8"?>

     
        
            
            
        
       
      

         
            
            
        
        

Ніжэй прыводзіцца схема дыялогу.

<?xml version="1.0" encoding="utf-8"?>




    

    



<button
    android:id="@+id/button1"
    style="@style/wrap"
    android:layout_gravity="center"
    android:text="Button" />


І ніжэй з'яўляецца актыўнасць, у якой я ствараю дыялог.

@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();
        }
    });
}
17

7 адказы

Адзінае рашэнне, якое я знайшоў, . Выкарыстанне дыялогу замест AlertDialog і ўсталяваць празрысты фон:
dialog.getWindow() setBackgroundDrawableResource (android.R.color.transparent).
Таму вы не можаце выкарыстоўваць будаўнік. Але вы можаце выкарыстоўваць новы дыялог() таксама ў onCreateDialog зваротнага выкліку DialogFragment, калі вы будзеце прытрымлівацца лепшым прынцыпы.

Гэта працуе таксама для Gingerbread.

Besides the layered drawable can be simplified to one shape with xml element for the border.

28
дададзена
як гэта зрабіць для усплываючых вокнаў
дададзена аўтар Prashanth Debbadwar, крыніца
Змена ў дыялогу замест AlertDialog sloved гэта для мяне, нарэшце. Дзякуй майму сябру :)
дададзена аўтар Shirane85, крыніца

У мяне была аналагічная праблема, калі зрабіў дыялог пашырэння 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;
}

}

Спадзяюся, што гэта дапамагае.

12
дададзена
Гэта выдатна працуе, дзякуй! Гэта адзінае рашэнне, якое я знайшоў, што працуе з DialogFragments ...
дададзена аўтар Aenadon, крыніца
Пасля стагоддзяў спрабуе гэта адзіны цяжкім, які працаваў для мяне! Дзякуй!
дададзена аўтар andrew, крыніца
@greatergoodguy, калі ласка, калі гэты адказ з'яўляецца рашэннем вашай праблемы, прыняць яго
дададзена аўтар RiadSaadi, крыніца

Проста паспрабуйце

myDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
6
дададзена

У вас файл Java трымаць ніжэй код і змяніць імя макета

View mView =LayoutInflater.from(mContext).inflate(R.layout.layout_pob,null); 
alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
2
дададзена

Выкарыстоўвайце 9-патч PNG з празрыстасцю ў гэтых кутах.

1
дададзена
Гэта не зыходны код рашэння. Гэта 9-патч PNG developer.android.com/studio/write/draw9patch.html </а>
дададзена аўтар David Jashi, крыніца
Любы прыклад кода?
дададзена аўтар Talha, крыніца

After a long time strugglling with this and some further problems I encountered I found quite a succinct answer that works on API < 11:

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

1
дададзена

Ніжэй код вырашана пытанне

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

дзякуй, Nagendra

0
дададзена