溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android自定義Dialog及與Activity的交互

發(fā)布時間:2020-06-16 21:41:34 來源:網(wǎng)絡(luò) 閱讀:3703 作者:hnkkfan 欄目:移動開發(fā)

一個小項目,需要用到一個自定義的Dialog,Dialog中需要一個ImageView用于顯示表情圖片,一個TextView用來顯示提示文本,點擊任何地方關(guān)閉Dialog,同時關(guān)閉打開這個Dialog的Activity。
效果如下圖:
Android自定義Dialog及與Activity的交互
實現(xiàn)過程如下:
一、定義一個布局文件(dialog_custom.xml)
代碼如下:
———————————————————————————————

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/layout_dialog"
        android:layout_width="330dip"
        android:layout_height="150dip"
        android:background="@drawable/shape_conner_white_bg"    
        android:orientation="horizontal">

            <ImageView 
                android:id="@+id/im_toast_icon"
                android:layout_width="100dip"        
                android:layout_height="100dip"        
                android:background="@null" 
                />     
            <TextView        
                android:id="@+id/tv_toast_content"        
                android:layout_width="180dip"        
                android:layout_height="wrap_content"        
                android:layout_marginTop="20dip"        
                android:text=""        
                android:textColor="#2f97e9"        
                android:textSize="18sp" 
                android:singleLine="false"
                android:gravity="center_vertical"
                />

</LinearLayout>

———————————————————————————————

內(nèi)容很簡單,就一個LinearLayout布局,里面有一個ImageView,一個TextView。
LinearLayout為了實現(xiàn)圓角矩形的效果,用了個shape背景。代碼如下(shape_conner_white_bg.xml):
———————————————————————————————

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >     
     <corners android:radius="4dp" />      
        <solid       android:color="@android:color/white"       />
     </shape>

———————————————————————————————
二、自定義DialogUtils類,代碼如下:
———————————————————————————————


import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.graphics.drawable.Drawable;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class DialogUtils 
{    
    private static TextView tipTextView;    
    private static Dialog MyDialog;
    private static ImageView image_Icon;
    private static LinearLayout layout_dialog;
    //Dialog有三個參數(shù),Contex不用多說,msg是提示文本,icon_draw是需要顯示的圖標(biāo)。
public static void showCompleteDialog(final Context context,String msg,Drawable  icon_draw)
    {        
        LayoutInflater inflater = LayoutInflater.from(context);        
        View v = inflater.inflate(R.layout.dialog_custom, null);// 得到加載view
        tipTextView = (TextView) v.findViewById(R.id.tv_toast_content);// 提示文字 
        image_Icon=(ImageView)v.findViewById(R.id.im_toast_icon);//提示圖標(biāo)
        tipTextView.setText(msg);// 設(shè)置加載信息  
        image_Icon.setImageDrawable(icon_draw);
        layout_dialog=(LinearLayout) v.findViewById(R.id.layout_dialog);
        layout_dialog.setOnClickListener(new OnClickListener() 
        {

            @Override
            public void onClick(View v)
            {
                MyDialog.dismiss();

            }
        });

        MyDialog = new Dialog(context, R.style.MyDialogStyle);// 創(chuàng)建自定義樣式dialog
        MyDialog.setCancelable(true); // 按“返回鍵”可以關(guān)閉Dialog       
        MyDialog.setCanceledOnTouchOutside(true); // 點擊加載框以外的區(qū)域可以關(guān)閉Dialog  
        //定義MyDialog關(guān)閉時同時關(guān)閉Activity
        MyDialog.setOnDismissListener(new OnDismissListener() 
        {

            @Override
            public void onDismiss(DialogInterface dialog) 
            {
                //MyDialog.getOwnerActivity().finish();
                Activity act=(Activity)context;
                act.finish();
                MyDialog.dismiss();

            }
        });

        MyDialog.setContentView(v, new LinearLayout.LayoutParams(                
                LinearLayout.LayoutParams.MATCH_PARENT,                
                LinearLayout.LayoutParams.MATCH_PARENT));// 設(shè)置布局        
        /**         *將顯示Dialog的方法封裝在這里面         */        
        Window window = MyDialog.getWindow();        
        WindowManager.LayoutParams lp = window.getAttributes();        
        lp.width = 900;        
        lp.height = 360;        
        lp.y=-150;        
        window.setGravity(Gravity.CENTER_HORIZONTAL);        
        window.setAttributes(lp);        
        MyDialog.show();    
        }
    }   

其中MyDialogStyle是在res/values/style中定義的:

<style name="MyDialogStyle">        
        <item name="android:windowBackground">@android:color/transparent</item>        
        <item name="android:windowFrame">@null</item>        
        <item name="android:windowNoTitle">true</item>       
         <item name="android:windowIsFloating">true</item>        
         <item name="android:windowIsTranslucent">true</item>        
         <item name="android:windowContentOverlay">@null</item>        
     <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 

———————————————————————————————
這樣就OK了,在需要打開Dialog的地方添加以下代碼就行了:
DialogUtils.showCompleteDialog(getContext(),"不好意思,你輸給了手機AI!",getResources().getDrawable(R.drawable.lost));

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI