Как получить эту кнопку / изображение на границе пользовательского диалогового окна? - PullRequest
4 голосов
/ 09 марта 2011

enter image description here

Как получить эту крестовую кнопку / изображение (обведено красным) на границе пользовательского диалогового окна?

Ответы [ 4 ]

13 голосов
/ 09 марта 2011

Android не Windows. Вам не нужна кнопка «Закрыть» в стиле Windows. Кроме того, Android - это не MacOS, поэтому вам не нужна маленькая блестящая красная конфетоподобная точка.

При разработке приложения для мобильной платформы вы должны соответствовать Руководствам по пользовательскому интерфейсу , которые определяют шаблоны использования и визуальные стили этой платформы.

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

Клавиша «Назад» - это кнопка, которая делает именно то, что вы хотите. Он закрывает диалог без выбора. Пусть платформа Android сделает то же самое здесь. Не заставляйте пользователей думать о другой ОС, отличной от той, которую они используют.

2 голосов
/ 09 марта 2011

HI,

, чтобы создать диалоговое окно Custom, выполните следующие действия.

  • создайте XML-файл style.xml в папке значений.и введите стиль в свой тег ресурса.

    <style name="Theme.CustomDialog"
        parent="android:style/Theme.Dialog">
        <item name="android:windowBackground">@drawable/bg_popup</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:layout_width">wrap_content</item>
        <item name="android:layout_height">wrap_content</item>
    </style>
    
  • создайте файл custom_dialog.xml в папке макета.

    <RelativeLayout android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    
        <LinearLayout android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_marginRight="10dp">
        </LinearLayout>
    
        <ImageView android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:background="@drawable/red_cross"
            android:layout_alignParentRight="true" android:layout_alignParentTop="true">
        </ImageView>
    </RelativeLayout>
    

  • наконец-то получите доступ к этому макету в действии, которое будет работать.

1 голос
/ 26 марта 2014

Я немного поработал над тем, что вот код, протестированный на nuxes 5, крест на прикрепленном изображении - это изображение

dialog.xml

<RelativeLayout
    android:layout_marginTop="20dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginRight="20dp"
    android:background="@drawable/rounded_border"
    android:paddingBottom="20dp"
    android:gravity="center_horizontal" >

    <TextView
        android:id="@+id/label_popup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="40dp"
        android:gravity="center_horizontal"
        android:text="@string/label_recive_pin"
        android:textColor="@color/green_line"
        android:padding="5dp"
        android:textScaleX="1.3"
        android:textSize="18sp" />

    <EditText
        android:id="@+id/edtpin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/label_popup"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="40dp"
        android:background="@color/edit_green_bg"
        android:ems="15"
        android:gravity="center_horizontal"
        android:hint="@string/enter_email"
        android:inputType="textEmailAddress"
        android:paddingBottom="10dp"
        android:paddingTop="10dp"
        android:textColor="@color/edit_green_txt"
        android:textSize="15sp" >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/btnLogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/edtpin"
        android:layout_alignRight="@+id/edtpin"
        android:layout_below="@+id/edtpin"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp"
        android:background="@drawable/btn_bg_darkgreen"
        android:onClick="onLoginButtonClick"
        android:text="@string/get_pin_btn_txt"
        android:textColor="@color/white"
        android:textSize="20sp" />
</RelativeLayout>

<ImageView
    android:id="@+id/cancel_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/cross_window" />

Макет rounded_border.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/white" />
            <corners android:radius="12dip" />
            <stroke
                android:width="1dip"
                android:color="@color/green_line" />
        </shape>
    </item>
</layer-list>

Внутри класса диалога в методе onCreate

  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));// *that how i made background transparent so that **Only** rounded border can be seen* 
        setContentView(R.layout.dialog_getpin);
    }

Демонстрация enter image description here

1 голос
/ 07 января 2012

это код внутри вашей активности

AlertDialog.Builder builder;


                    Context mContext = YOURACTIVITY.this;
                    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
                    View layout = inflater.inflate(R.layout.custom_dialog,
                                                   (ViewGroup) findViewById(R.id.layout_root));




                    ImageView close_dialog = (ImageView) layout.findViewById(R.id.imageView_custom_dialog_close);

                    close_dialog.setOnClickListener(new View.OnClickListener() {

                        public void onClick(View v) {

                        alertDialog.dismiss();

                        }
                    });


                    builder = new AlertDialog.Builder(mContext);
                    builder.setView(layout);
                    alertDialog = builder.create();

                    alertDialog.show();

это custom_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_root"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="10dp" android:background="@drawable/background">




    <ImageView
        android:id="@+id/imageView_custom_dialog_close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_margin="2dp"
        android:src="@android:drawable/ic_delete" />


//add here any controls you might want

</LinearLayout>

объявить где-то частным AlertDialog alertDialog; ....

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...