Android 开发之自定义Dialog及UI的实现

摘要:
在开发中,我们经常自定义对话框,因为本地AlertDialog无法满足我们的需求。此时,我们需要自定义对话框。如何自定义对话框并不困难,但有点麻烦。即自定义UI的xml文件,然后使用setContentView方法自定义设置。最近,我做了一个发展的小例子,并在此与大家分享。Dialog的效果如下:创建如下对话框类:importandroid.app。对话我

我们在开发中,经常会自定义Dialog,因为原生的AlertDialog无法满足我们的需求,这个时候就需要自定义Dialog,那么如何自定义呢,其实不难,就是有点繁琐而已。也就是自定义一个UI的xml文件,然后用setContentView方法来自定义设置。最近开发做了个小例子,特此分享记录出来给大家。

Dialog效果如下:

Android 开发之自定义Dialog及UI的实现第1张

创建对话框类实现如下:

import android.app.Dialog;
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.TextView;


public class DialogUitl {
    
    private static Dialog watchMovieDialog;
    public static Dialog showWatchMovieDialog(Context context) {
        if(watchMovieDialog == null){
            watchMovieDialog = new Dialog(context, R.style.watchMovieDialog);
            View dialogView = LayoutInflater.from(context).inflate(R.layout.dialog_watch_movie, null);
            watchMovieDialog.setCanceledOnTouchOutside(false);
            watchMovieDialog.setContentView(dialogView);
            Window dialogWindow = watchMovieDialog.getWindow();
            WindowManager.LayoutParams lp = dialogWindow.getAttributes();
            dialogWindow.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
            DisplayMetrics metrics = context.getApplicationContext().getResources().getDisplayMetrics();
            lp.width = metrics.widthPixels * 5 / 6;  
            lp.height = metrics.heightPixels *  4/5; 
            dialogWindow.setAttributes(lp);
            dialogWindow.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.dlg_movie_bg));
            //dialogWindow.setBackgroundDrawableResource(R.drawable.dlg_movie_bg);
            watchMovieDialog.setCancelable(true);
            
            String title = "金玉良缘[高清版]";
            String score = "9.0分";
            String director = "黄祖权";
            String actor = "霍建华,唐嫣等";
            int   imageId = R.drawable.movie_img;
            String duration = "45集";
            String introduce = "    故事发生在明朝永乐年间。江阁老爱女江晓萱(贡米 饰)违太后旨意,不愿与金府公子金元宝(霍建华 饰)成婚,在大婚之际出逃,侠女玉麒麟(唐嫣 饰)为调查。";
            
            ((TextView)dialogView.findViewById(R.id.title)).setText(title);
            ((TextView)dialogView.findViewById(R.id.score)).setText(score);
            ((TextView)dialogView.findViewById(R.id.redirectContent)).setText(director);
            ((TextView)dialogView.findViewById(R.id.roleContent)).setText(actor);
            ((TextView)dialogView.findViewById(R.id.duration)).setText(duration);
            ((TextView)dialogView.findViewById(R.id.introduce)).setText(introduce);
            
            ((ImageView)dialogView.findViewById(R.id.ivImage)).setImageResource(imageId);
            
        }
        return watchMovieDialog;
    }
    
}

对应的UI的xml文件实现如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dialog"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" 
    
    >
    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dip"
         >
        <TextView
            android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:textSize="18sp"
            android:text="" />
        <TextView
            android:id="@+id/score"
            
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:textColor="@color/color_bebebe"
            android:textSize="18sp"
            android:text="" />
    </RelativeLayout>
    <ImageView 
        android:id="@+id/ivImage"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:layout_marginBottom="10dip"
        android:layout_width="fill_parent"
        android:layout_height="180dp"
        android:src="@drawable/movie_img" />
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:layout_marginBottom="10dip"
        android:orientation="vertical"
        android:background="@color/white"
         >
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginBottom="10dip" >

            <TextView
                android:id="@+id/role"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="主演:"
                 android:textColor="@color/color_959595"
                android:textSize="12sp" />

            <TextView
                android:id="@+id/roleContent"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                 android:textColor="@color/color_959595"
                android:textSize="12sp" />

        </LinearLayout>
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
            
            <TextView
                android:id="@+id/redirect"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:text="导演:"
                android:textColor="@color/color_959595"
                android:textSize="12sp" />

            <TextView
                android:id="@+id/redirectContent"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:singleLine="false"
                android:text=""
                android:textColor="@color/color_959595"
                android:textSize="12sp" />
            <TextView
                android:id="@+id/redirect"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:singleLine="true"
                android:text="  时长:"
                android:textColor="@color/color_959595"
                android:textSize="12sp" />

            <TextView
                android:id="@+id/duration"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:singleLine="false"
                android:text=""
                android:textColor="@color/color_959595"
                android:textSize="12sp" />

        </LinearLayout>
    </LinearLayout>
    <TextView
                android:id="@+id/introduce"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dip"
                android:layout_marginRight="10dip"
                android:layout_marginBottom="10dip"
                android:singleLine="false"
                android:text=""
                android:textColor="@color/color_959595"
                android:lineSpacingExtra="3dp"
                android:textSize="12sp" />

    <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dip"
            android:layout_marginRight="10dip"
            android:layout_marginBottom="10dip"
            android:gravity="center"
            android:orientation="horizontal" 
            >
                <TextView
                    android:id="@+id/playing"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:layout_gravity="center"                    
                    android:background="@drawable/btn_install_selector"
                    android:gravity="center"
                    android:text="开始播放" 
                    android:textColor="@color/white"
                    android:textSize="16sp"
                    android:clickable="true"/>


        </LinearLayout>
    

</LinearLayout>

对话框底部的绿色Button的Style 实现(btn_install_selector.xml):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/btn_install_bg"/>
    <item android:state_enabled="false" android:drawable="@drawable/btn_sending_bg"/>
    <item android:drawable="@drawable/btn_install_normall"/>
</selector>

最后调用Dialog方法如下:

在你需要弹出对话框的地方 调用以下代码即可:

DialogUitl.showWatchMovieDialog(this).show();

免责声明:文章转载自《Android 开发之自定义Dialog及UI的实现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Use // eslint-disable-next-line to ignore the next line.linux查看文件大小下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android 获取 View 宽高的常用正确方式,避免为零

相信有很多朋友都有过在 Activity 中通过 getWidth() 之类的方法获取 View 的宽高值,可能在 onCreate() 生命周期方法中,也可能在 onResume() 生命周期方法中。然而,不幸的是,并不能获取所要的结果,宽高值均为 0。 如果对 View 的绘制显示流程熟悉的话,就会知道问题所在。我们知道,在自定义 View 时,通...

(转)Android之RemoteViews

RemoteViews中的setxxx方法 比如setCharSequence(int viewId, String methodName, CharSequence value); views.setString(R.id.textview01, "setText", battery + "%"); 其中views是RomoteViews的实例, 第一个...

Android 电量优化

极力推荐Android 开发大总结文章:欢迎收藏程序员Android 力荐 ,Android 开发者需要的必备技能 电量优化一直是Android 开发中的头等问题。本篇将分析一下Android M 以上电量优化措施电量优化相关的部分知识点。 注:文章参考MTK手机解决方案文档 通过本篇文章阅读,你将收获以下知识点: 1.Doze 模式 2.空闲状...

Android下OpenCV的环境搭建

目录(?)[-] 前言 系统环境 相关工具 Android ADT环境搭建 Android SDK环境变量的配置 Android NDK的安装与配置 OpenCV for Android 环境搭建 基于SDK的OpenCV开发 基于NDK的OpenCV开发 Android上层程序的编写 来自CODE的代码片 activity_mainxml...

抓取Android应用的log

今天测试软件时,遇到一个bug,因为开发说那边不复现,所以为了更好追踪这个问题,需要抓取复现步骤地log. 在网上查了相关资料,同时结合自己遇到的问题,总结如下。 1. 抓取Android 应用log的方法 2. adb server is out of date.killing的解决办法 3. 在Eclipse中怎样成功连接Android手机 1. 抓取...

【Android】缩略图Thumbnails

在Android,多媒体文件(视频和图片)都是有缩略图的,在很多应用中,我们需要获取这些缩略图。比如最近在做一个类似相册的应用,需要扫描相册里面的图片,然后获取其缩略图,使用GridView去展示缩略图,当点击之后,我们需要获取其原始图,所以相关的需求如下: 1)获取缩略图(一个问题是:是否所有的图片以及视频都有缩略图?); 2)将缩略图和原始图关联起来;...