android ui定义自己的dialog(项目框架搭建时就写好,之后事半功倍)

自定义一个dialog:

之前有很多博客都有过这方面的介绍,可是个人觉得通常不是很全面,通用性不是很强,一般会定义一个自己的dialog类,然后去使用,难道每一个dialog都要定义一个class吗??

首先:dialog一般包含一个标题部分,内容部分,按钮部分,风格部分。progressdialog则多一个进度条

那么我们就不妨写一个dialog类,在构造方法中,我们把标题,内容,按钮信息都给他,然后可以show出来

然后,在构造方法中添加一个接口,接口中使用确定,取消等等的按钮的回调。

那么开始咯:

第一步定义一个自己的dialog类

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.easipass.R;

public class CustormDialog extends Dialog implements DialogInterface {

private String title;
private String content;
private DialogCallBack callback;
private int index;

/***
* @param context
* @param title 对话框标题
* @param content 对话框内容
* @param theme 对应的style 这里为R.style.CustomDialog_1 可自定义style
* @param dialogcallback 确定取消按钮的回调 分别是 onCancle onOk
* @param index 显示几个button 1 为只有一个确定键,其他为有确定取消两个按钮
*
* 调用实例
* dialog = new CustormDialog(SettingsActivity.this,"缓存清理",
* "点击确定为您清理以下历史信息:\n系统通知,提箱小票,行业资讯,装箱单录入", R.style.CustomDialog_1,
   * new DialogCallBack(){
    * @Override
    * public void OkDown() {
* dialog.dismiss();
* //这里放 确定按钮响应
   * }
   * @Override
   * public void CancleDown() {
* dialog.dismiss();
* //这里放取消按钮响应
   * } },2);
*/
public CustormDialog(Context context,String title,String content,int theme,DialogCallBack dialogcallback,int index) {
super(context, theme);
this.title = title;
this.content = content;
this.callback = dialogcallback;
this.index = index;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dg_custormdialog);
TextView titl = (TextView) findViewById(R.id.title);
TextView cont = (TextView) findViewById(R.id.tv_content);

titl.setText(title);
cont.setText(content);

Button cancel = (Button) findViewById(R.id.cancel);
Button ok = (Button) findViewById(R.id.sure);
if(index == 1){
cancel.setVisibility(View.GONE);
}else{
cancel.setOnClickListener(new android.view.View.OnClickListener() {
public void onClick(View v) {
CustormDialog.this.dismiss();
callback.CancleDown();
}
});
}
ok.setOnClickListener(new android.view.View.OnClickListener() {
@Override
public void onClick(View v) {
CustormDialog.this.dismiss();
callback.OkDown();
}
});
}

}


这个类中实现了接口
DialogCallBack

再定义下这个回调:

public interface DialogCallBack {
abstract void OkDown();
abstract void CancleDown();
}

初步的框架就有了

接下来我们把布局写一下(当然框架在那,布局完全自己发挥就好了)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mian_container"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:background="@color/easipass_dailog_bg_blue"
android:orientation="vertical"
android:padding="10dip" >

<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/notification_version_name"
android:textSize="18sp" />

<View
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_marginTop="10dip"
android:background="@drawable/cmb_list_separator_line" />

<TextView
android:id="@+id/tv_content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:gravity="center_horizontal"
android:text="@string/version_isup"
android:textSize="18sp" />

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_horizontal"
android:padding="10dip" >

<Button
android:id="@+id/sure"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="@string/ok"
android:textSize="@dimen/main_content_text_size" />
<Button
android:id="@+id/cancel"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="@string/cancel"
android:textSize="@dimen/main_content_text_size" />
</LinearLayout>
</LinearLayout>


系统自带的style通常让我们受不鸟,它有一个白色边框,等等,那我们最好定义一个自己的style

<style name="CustomDialog_1" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@null</item>
<item name="android:backgroundDimEnabled">false</item>
</style>

一切顺利的话,我们尝试一下哦

dialog = new CustormDialog(SettingsActivity.this,"放标题","放内容", R.style.CustomDialog_1,
new DialogCallBack(){
@Override
public void OkDown() {
dialog.dismiss();

}
@Override
public void CancleDown() {
dialog.dismiss();
}

},2);


这里的 2是显示 确定 取消
两个按钮,如果填写1,那就只有确定按钮

自己发挥咯

个人布局的比较丑啦,相信大家比俺文艺很多

有了这一个类,以后有确定取消按钮,以及只有确定按钮的对话框都搞定啦

ps,如果还要一次性搞定progressdialog,那就用一个帧布局,就好了,给构造添加一个参数,废话不多说了,相信大家也没有这么笨的,举一反三啦

时间: 2024-10-13 04:09:59

android ui定义自己的dialog(项目框架搭建时就写好,之后事半功倍)的相关文章

1、Android项目框架搭建 (分析需求、整理资料)

闲来无事.想搭个框架试试 分析一般应用 将资料整理整理 粗略统计 需要以下资料 1.android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新 ListView.ViewPager.WevView.ExpandableListView.GridView.(Horizontal )ScrollView.Fragment上下左右拉动刷新,比下面johannilsson那个只支持ListView的强大的多.并且他实现的下拉刷新ListView在item不足一屏情况下也

(三) Angular2项目框架搭建心得

前言: 在哪看到过angular程序员被React程序员鄙视,略显尴尬,确实Angular挺值得被调侃的,在1.*版本存在的几个性能问题,性能优化的"潜规则"贼多,以及从1.*到2.*版本的面目全非,不过宽容点来看这个强大的框架,升级到ng2肯定是一件好事情,虽然截至目前ng2还存在或多或少需要完善的地方,但是ng2做到了留下并强化ng1好的部分,移除或改善其不好的部分,并且基于许多较新Web技术来开发,不去看从ng1迁移到ng2的门槛和工作量的话,ng2的编程体验是很酷炫的. 目前n

[AngularJS]项目框架搭建-MyFirst Skeleton

前文有提到过 做一个简单的订餐系统,最近花了点时间,了解了一下AngularJS框架的使用.因此本文的目的根据了解的知识重新搭建基于 AngularJS框架. 该框架是基于对于AngularJS的学习而制定的,这其中肯定有很多不足,在以后的学习中在加以改进. 一.系统准备 安装Node.js version>=0.10.0版本 Git  Shell 并添加该 Shell脚本到Path环境变量中  Path=:,"$git_home/bin"   二.手动搭建框架 2.1 创建开发

Spring+Struts2+Mybatis框架搭建时的常见典型问题

搭建SSM框架时,总是遇到这样那样的问题,有的一眼就能看出来,有的需要经验的积累.现将自己搭建SSM框架时遇到的典型问题总结如下: 一.Struts2框架下的action中无法使用@Autowired自动注入Bean(运行时bean总是为null) 常见原因: A.Spring的配置文件中组件扫描路径错误(即<context:component-scan base-package="xx.xx" />配置错误). B.@Autowired声明的beanName错误,bean

第一节项目框架搭建

动软代码生成器的使用 创建三个类库项目DAL.BLL.Model,创建两个asp.net应用程序Web:Front(前台).Admin(后台管理).DAL引用Model,BLL引用Model和DAL,Web引用BLL和Model. 如果报错“添加服务器配置失败”,则以管理员身份运行“动软代码生成器”. (*)根据我的表命名规范,配置“动软”的“选项”→“代码生成器设置”,命名规则中“替换表中的字符”填“T_”(大小写敏感),“类命名规则”中,除了Model最后一个文本框留空之外,其他两个填BLL

ASP.NET MVC企业级项目框架搭建实战

MVC项目搭建笔记---- 项目框架采用ASP.NET MVC+Entity Framwork+Spring.Net等技术搭建,搭建过程内容比较多,结合了抽象工厂的思想降低了三层之间的耦合,可以使用此套框架进行可扩展性要求高的企业级MVC项目开发.本框架的架构图如下: 第一步(创建分类文件夹): 创建5个文件夹.分别为UI,Model,BLL,DAL,Common,以便于将各模块分类整理. 第二步(项目类库的创建): 在UI文件夹创建ASP.NET MVC4项目模板选择基本. 在Model文件夹

记录-项目java项目框架搭建的一些问题(maven+spring+springmvc+mybatis)

伴随着项目框架的落成后,本以为启动就能成功的,but.... 项目启动开始报错误1:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 这个错百度到说是缺少这个包,但实际在项目中看到maven里面是有这个包的.于是继续百度到[可能包是找到了,但没有依赖在项目中] 项目右击-----project-----deployment assembly , add ,java bui

2.0项目框架搭建

2.1.科学减肥网: http://www.kxjf1.com 项目架构如下 解决方案分层 01UI KXJF.Helper(web.wap帮助类库) KXJF.Logic(web控制器逻辑) KXJF.Logic.SysAdmin(web后台控制器逻辑) KXJF.Logic.Wap(wap控制器逻辑) KXJF.UrlProvider(URL优化,提供良好的URL) 02Service KXJF.IBLL(业务逻辑接口层) KXJF.BLL(业务逻辑实现层) 03Repository KXJ

MyEclispe SSH五分-彩平台出租项目框架搭建

基于MyEclipse2014,首先五分-彩平台出租 Q1446595067注意SHH框架的搭建顺序,Struts2-Spring-Hibernate1.搭建Struts2框架1.1首先创建Web Project,创建的时候注意勾选,会自动生成web.xml,否则自己手动创建比较麻烦**这里写图片描述1.2搭建Struts2框架.搭建SSH框架的方式有两种,第一种是自己下载jar包,手动导入,创建并编写配置文件,第二种通过MyEclipse自动创建,我们这里使用第二种! 右键项目-MyEclis