如何在自定义对话框的边界上获得交叉按钮/图像?

时间:2011-03-09 13:00:13

标签: android dialog

enter image description here

如何在自定义对话框的边界上获得交叉按钮/图像(红色圆圈)?

4 个答案:

答案 0 :(得分:13)

Android不是Windows。您不需要Windows样式的“关闭”按钮。此外,Android不是MacOS,所以你也不需要一点闪亮的红色糖果点。

为移动平台开发应用程序时,您应该遵循定义该平台的使用模式和视觉样式的User Interface Guidelines

Android没有标题栏,没有下拉菜单,也没有最小化/恢复/关闭按钮。不要试图制作它们,否则你会制作一个看似从未用于Android平台的应用程序。

“后退”硬键是完全符合您要求的按钮。它会在不进行选择的情况下关闭对话框。让Android平台在这里做同样的事情。不要强迫用户在他们使用的操作系统中思考。

答案 1 :(得分:2)

HI,

您必须按照以下步骤制作此自定义对话框。

  • 在您的values文件夹中创建一个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>
    

  • 最终在活动中访问此布局。

答案 2 :(得分:1)

这是您活动中的代码

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; ....

希望这对你有所帮助。

答案 3 :(得分:1)

我做了一些工作,这里是在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