我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android用PopupWindow实现自定义Dailog

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android用PopupWindow实现自定义Dailog

Android的PopupWindow是个很有用的widget,利用它可以实现悬浮窗体的效果,比如实现一个悬浮的菜单,最常见的应用就是在视频播放界面里,做一个工具栏,用来控制播放进度。本文利用PopupWindow来实现一个通用的Dailog,类似Android系统的AlertDailog,从中学习和掌握有关PopupWindow和Dailog的使用和实现细节。

界面效果如图所示,点击 Click 按钮后,弹出对话框提示。


(1).  CustomDailog的布局

首先定义 CustDailog的布局文件,由系统的AlertDailog可以知道,一个对话框包含了三个要素,一个是Title,即,一个是Message,即主体内容,还有一个是Button,即确定和取消的按钮,用来与用户交互。因此,布局设计如下:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:orientation="vertical"
  android:background="@drawable/shape_bg"
  android:layout_margin="10dp">
  <TextView   
    android:id="@+id/CustomDlgTitle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textStyle="bold"
    android:textSize="20sp"
    android:layout_margin="10dp"
    android:gravity="center"/>
  <View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="@android:color/darker_gray"/>
  <LinearLayout
    android:id="@+id/CustomDlgContentView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_margin="5dp" />
  <TextView
    android:id="@+id/CustomDlgContentText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="15sp"
    android:layout_margin="5dp"
    android:paddingLeft="5sp"/>
  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_margin="5dp" >
    <Button
      android:id="@+id/CustomDlgButtonOK"
      android:layout_width="0dp"
      android:layout_weight="0.5"
      android:layout_height="wrap_content"
      android:visibility="gone"/>
    <Button
      android:id="@+id/CustomDlgButtonCancel"
      android:layout_width="0dp"
      android:layout_weight="0.5"
      android:layout_height="wrap_content"     
      android:visibility="gone"/>
  </LinearLayout>
</LinearLayout>

其中,shap_bg.xml 是Dailog的背景的定义文件,你可以修改此文件,来改变Dailog的背景:


<?xml version="1.0" encoding="UTF-8"?>
<shape android:shape="rectangle"
 xmlns:android="http://schemas.android.com/apk/res/android">
  <solid android:color="#e6ecee" />
  <stroke android:width="1.0dip" android:color="@android:color/darker_gray" />
  <corners android:radius="8.0dip" />
</shape>

(2). CustomDailog的定义

CustomDailog的接口,可以类比AlertDailg的接口定义,主要包括如下一些方法:

1.  setTitle 设置
2.  setMessage 设置主体内容
3.  setPositiveButton 设置 “确定” 按钮
4.  setNegativeButton 设置 “取消” 按钮
5.  show   显示
6.  dimiss 消失

其定义如下:


package com.ticktick.popdailog;
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
public class CustomDailog {
  private View mParent;
  private PopupWindow mPopupWindow;
  private LinearLayout mRootLayout; 
  private LayoutParams mLayoutParams; 
  //PopupWindow必须有一个ParentView,所以必须添加这个参数
  public CustomDailog(Context context, View parent) {
    mParent = parent;
    LayoutInflater mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
    //加载布局文件
    mRootLayout = (LinearLayout)mInflater.inflate(R.layout.custom_dailog, null); 
    mLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
  } 
  //设置Dailog的
  public void setTitle(String title) {
    TextView mTitle = (TextView)mRootLayout.findViewById(R.id.CustomDlgTitle);
    mTitle.setText(title);
  }
  //设置Dailog的主体内容
  public void setMessage(String message) {
    TextView mMessage = (TextView)mRootLayout.findViewById(R.id.CustomDlgContentText);
    mMessage.setText(message);
  }
  //设置Dailog的“确定”按钮
  public void setPositiveButton(String text,OnClickListener listener ) {
    final Button buttonOK = (Button)mRootLayout.findViewById(R.id.CustomDlgButtonOK);
    buttonOK.setText(text);
    buttonOK.setOnClickListener(listener);
    buttonOK.setVisibility(View.VISIBLE);
  }
  //设置Dailog的“取消”按钮
  public void setNegativeButton(String text,OnClickListener listener ) {
    final Button buttonCancel = (Button)mRootLayout.findViewById(R.id.CustomDlgButtonCancel);
    buttonCancel.setText(text);
    buttonCancel.setOnClickListener(listener);
    buttonCancel.setVisibility(View.VISIBLE);
  }
  //替换Dailog的“主体”布局
  public void setContentLayout(View layout) {
    TextView mMessage = (TextView)mRootLayout.findViewById(R.id.CustomDlgContentText);
    mMessage.setVisibility(View.GONE);
    LinearLayout contentLayout = (LinearLayout)mRootLayout.findViewById(R.id.CustomDlgContentView);   
    contentLayout.addView(layout);       
  }
  //设置Dailog的长宽
  public void setLayoutParams(int width, int height) {
    mLayoutParams.width = width;
    mLayoutParams.height = height;
  }
  //显示Dailog
  public void show() {
    if(mPopupWindow == null) {
      mPopupWindow = new PopupWindow(mRootLayout, mLayoutParams.width,mLayoutParams.height);
      mPopupWindow.setFocusable(true);
    }
    mPopupWindow.showAtLocation(mParent, Gravity.CENTER, Gravity.CENTER, Gravity.CENTER);
  }
  //取消Dailog的显示
  public void dismiss() {
    if(mPopupWindow == null) {
      return;
    }
    mPopupWindow.dismiss();
  }
}

(3). 在Activity中的使用方法

由于 PopupWindow 的显示必须给一个ParentView,在Activity中使用的话,最简单的方法就是将整个activity的“根View”传递给这个PopupWindow,这样就可以在整个屏幕的正中央来显示Dailog,获取Acitivity的根View的方法如下:

findViewById(android.R.id.content)).getChildAt(0);

因此,上面定义的 CunstomDailog的使用方法如下所示:


final CustomDailog dailog = new CustomDailog(this,getRootLayout());
dailog.setTitle("Warning");
dailog.setMessage("This is ticktick's blog!");
dailog.setPositiveButton("OK", new OnClickListener() {    
  @Override
  public void onClick(View v) {
    dailog.dismiss();     
  }
});
dailog.setNegativeButton("Cancel", new OnClickListener() {    
  @Override
  public void onClick(View v) {
  dailog.dismiss();     
  }
});
dailog.show();

到此为止,整个Dailog的实现就介绍到这里了。

您可能感兴趣的文章:android PopupWindow 和 Activity弹出窗口实现方式android popwindow实现左侧弹出菜单层及PopupWindow主要方法介绍Android Animation实战之屏幕底部弹出PopupWindowAndroid入门之PopupWindow用法实例解析Android之用PopupWindow实现弹出菜单的方法详解Android编程实现popupwindow弹出后屏幕背景变成半透明效果Android PopupWindow 点击外面取消实现代码android使用PopupWindow实现页面点击顶部弹出下拉菜单Android中PopupWindow响应返回键并关闭的2种方法android教程之使用popupwindow创建菜单示例Android中自定义PopupWindow实现弹出框并带有动画效果Android编程中PopupWindow的用法分析【位置、动画、焦点】Android编程之PopupWindow隐藏及显示方法示例(showAtLocation,showAsDropDown)


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android用PopupWindow实现自定义Dailog

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android用PopupWindow实现自定义Dailog

Android的PopupWindow是个很有用的widget,利用它可以实现悬浮窗体的效果,比如实现一个悬浮的菜单,最常见的应用就是在视频播放界面里,做一个工具栏,用来控制播放进度。本文利用PopupWindow来实现一个通用的Dailo
2022-06-06

Android用PopupWindow实现自定义overflow

本文实例为大家分享了PopupWindow实现自定义overflow的具体代码,供大家参考,具体内容如下 当Action Bar的Action放不下时,系统会将其收集在overflow中。 用hierarchyviewer查看系统自己生成的
2022-06-06

Android简单实现自定义弹框(PopupWindow)

一:一般都是先上效果图二:实现步骤: 1.xml布局实现 2022-06-06

Android自定义popupwindow实例代码

先来看看效果图:一、布局 Android自定义popupwindow实例代码
2022-06-06

Android自定义PopupWindow小案例

PopupWindow是我们开发中的常客之一,使用起来也比较简单方便。 写了个最简单地自定义PopupWindow,记录下来,方便以后使用时直接在上面改动就可以。/*** @param* @author ldm* @descriptio
2022-06-06

Android自定义PopupWindow简单小例子

最近没事做就写了一下PopupWindow,希望对有些人有点帮助。 照常先看一下完成后的结果(界面比较难看就不要吐槽了)点击地理位置然后弹出的PopupWindow,数据我写死了但是可以根据你们的需求自己改,或者通过网络获取数据。我是通过l
2022-06-06

Android自定义仿微信PopupWindow效果

给大家分享一个高仿微信的PopupWindow、就是微信的扫一扫那个功能窗口、下面有应用运行效果图、更加直观的展示了Demo的效果、源代码是通过两种方法实现的、大家可以下载源代码研究研究、集成到自己的项目中也是很方便的、希望对大家有用、先看
2022-06-06

Android编程实现的自定义弹窗(PopupWindow)功能示例

本文实例讲述了Android编程实现的自定义弹窗(PopupWindow)功能。分享给大家供大家参考,具体如下: 在开发过程中,如果要弹出一个对话框,一般是使用AlertDialog,但其使用限制太大,灵活性不够,所以我们常需要用到灵活性更
2022-06-06

Android自定义弹出窗口PopupWindow使用技巧

PopupWindow是Android上自定义弹出窗口,使用起来很方便。 PopupWindow的构造函数为代码如下:public PopupWindow(View contentView, int width, int height, b
2022-06-06

Android中自定义PopupWindow实现弹出框并带有动画效果

使用PopupWindow来实现弹出框,并且带有动画效果 首先自定义PopupWindowpublic class LostPopupWindow extends PopupWindow { public Lost lost; public
2022-06-06

PopupWindow自定义位置显示的实现代码

一、概述在Android中弹出式菜单(以下称弹窗)是使用十分广泛的一种菜单呈现方式,弹窗为用户交互提供了便利。关于弹窗的实现大致有以下两种方式AlertDialog和PopupWindow,当然网上也有使用Activity并配合Dialog
2023-05-30

Android自定义PopupWindow仿点击弹出分享功能

本文实例自定义PopupWindow,点击弹出PopupWindow,背景变暗,仿点击弹出分享功能,供大家参考,具体内容如下注:参照大神代码写的自定义代码package com.duanlian.popupwindowdemo; impo
2022-06-06

Android实现自定义日历

自定义日历控件,支持旧历、节气、日期标注、点击操作 (参考网络上的日历控件改写) 注:将下面的四张资源图片拷贝到所建包的下一个image目录中,如Calendar.java 所在包为 cc.util.android.view,则需要再创建一
2022-06-06

如何在Android中使用PopupWindow制作一个自定义弹窗

本篇文章给大家分享的是有关如何在Android中使用PopupWindow制作一个自定义弹窗,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。代码:PopupWindow pw =
2023-05-31

Android自定义控件案例汇总1(菜单、popupwindow、viewpager)

自定义控件是根据自己的需要自己来编写控件。安卓自带的控件有时候无法满足你的需求,这种时候,我们只能去自己去实现适合项目的控件。同时,安卓也允许你去继承已经存在的控件或者实现你自己的控件以便优化界面和创造更加丰富的用户体验。在平常的项目中,我
2022-06-06

Android开发实现popupWindow弹出窗口自定义布局与位置控制方法

本文实例讲述了Android开发实现popupWindow弹出窗口自定义布局与位置控制方法。分享给大家供大家参考,具体如下:布局文件:主布局文件:activity_main:2023-05-30

Android自定义组件:2、如何实现和使用自定义组件、自定义属性

声明:本教程不收取任何费用,欢迎转载,尊重作者劳动成果,不得用于商业用途,侵权必究!!! 目录 一、前言 二、如何实现自定义组件 步骤1:写 attrs.xml 资源文件 1、attrs.xml 文件 和 R 文件对应关系 2、attrs.
2022-06-06

Android自定义Style实现方法

styles.xml如下: [html] 代码如下: