




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】在Android应用中常见弹框有哪些
本篇文章给大家分享的是有关在Android应用中常见弹框有哪些,在下觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着在下一起来看看吧。1.Dialog弹框android8种对话框(Dialog)使用方法汇总Dialog是系统自带的弹框,然而常常因为UI不好看而遭嫌弃,常需要自定义public
class
MyDialog
extends
Dialog
implements
android.view.View.OnClickListener
{
private
Context
mContext;
private
String
mTitle;
private
String
mDetail;
private
TextView
mTextTitle;
private
TextView
mTextDetail;
private
TextView
mButtonYes;
private
TextView
mButtonNo;
private
onClickInterface
mOnclClickInterface;
public
MyDialog(Context
context,
String
title,
String
detail)
{
super(context,
R.style.MyDialogStyle);
this.mContext
=
context;
this.mTitle
=
title;
this.mDetail
=
detail;
}
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
//
TODO
Auto-generated
method
stub
super.onCreate(savedInstanceState);
initView();
}
private
void
initView()
{
LayoutInflater
inflater
=
LayoutInflater.from(mContext);
View
view
=
inflater.inflate(R.layout.layout_dialog,
null);
setContentView(view);
mButtonYes
=
(TextView)
view.findViewById(R.id.dialog_yes);
mButtonNo
=
(TextView)
view.findViewById(R.id.dialog_no);
mTextTitle
=
(TextView)
view.findViewById(R.id.dialog_title);
mTextDetail
=
(TextView)
view.findViewById(R.id.dialog_detail);
mTextTitle.setText(mTitle);
mTextDetail.setText(mDetail);
mButtonYes.setOnClickListener(this);
mButtonNo.setOnClickListener(this);
}
public
interface
onClickInterface
{
public
void
clickYes();
public
void
clickNo();
}
public
void
setOnClickInterface(onClickInterface
onclClickInterface)
{
this.mOnclClickInterface
=
onclClickInterface;
}
@Override
public
void
onClick(View
v)
{
switch
(v.getId())
{
case
R.id.dialog_yes:
mOnclClickInterface.clickYes();
break;
case
R.id.dialog_no:
mOnclClickInterface.clickNo();
break;
default:
break;
}
}
}这里就是:1.绑定布局2.设置监听,监听接口主要说一下布局里的stytle(悬浮在Activity上,模糊显示就是在这里控制)<style
name="MyDialogStyle">
<item
name="android:windowBackground">@android:color/transparent</item>
<!--设置dialog的背景-->
<item
name="android:windowFrame">@null</item>
<!--Dialog的windowFrame框为无-->
<item
name="android:windowNoTitle">true</item>
<!--是否有title-->
<item
name="android:windowIsFloating">true</item>
<!--是否浮现在activity之上-->
<item
name="android:windowIsTranslucent">false</item>
<!--是否半透明-->
<item
name="android:windowContentOverlay">@null</item>
<!--对话框是否有遮盖,这个不设置的话,可能会出现边框黑线-->
<item
name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<!--动画-->
<item
name="android:backgroundDimEnabled">true</item>
<!--
背景是否模糊显示-->
</style>Dialog弹框一般用于,网络数据加载显示,或交互较少的弹框(基本被新下拉刷新控件SwipeRefreshLayout替代)2.Window弹框public
class
MyWindow
{
private
Context
mContext;
private
WindowManager
mwinWindowManager;
private
View
mView;
private
static
boolean
isShow
=
false;
public
MyWindow(Context
context)
{
mContext
=
context.getApplicationContext();
}
public
void
showMyWindow()
{
if
(isShow)
{
return;
}
mwinWindowManager
=
(WindowManager)
mContext.getSystemService(Context.WINDOW_SERVICE);
//设置WindowManager.LayoutParams的属性
WindowManager.LayoutParams
params
=
new
WindowManager.LayoutParams();
//类型
params.type
=
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
//flags
//如果设置了WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,弹出的View没焦点,收不到Back键的事件
//当按Back、Home键时,背景应用退出,弹出的view就可以悬浮在桌面了。
params.flags
=
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
params.format
=
PixelFormat.TRANSLUCENT;
params.width
=
LayoutParams.MATCH_PARENT;
params.height
=
LayoutParams.MATCH_PARENT;
params.gravity
=
Gravity.CENTER;
//初始化View
mView
=
initView(mContext);
//点击back键,关闭window
mView.setOnKeyListener(new
View.OnKeyListener()
{
@Override
public
boolean
onKey(View
v,
int
keyCode,
KeyEvent
event)
{
Log.d("wxx",
"onKey");
switch
(keyCode)
{
case
KeyEvent.KEYCODE_BACK:
Log.d("wxx",
"onKey
BACK");
hideMyWindow();
return
true;
default:
return
false;
}
}
});
mwinWindowManager.addView(mView,
params);
isShow
=
true;
}
private
View
initView(Context
context)
{
LayoutInflater
inflater
=
LayoutInflater.from(context);
View
view
=
inflater.inflate(R.layout.layout_window,
null);
Button
btnYes
=
(Button)
view.findViewById(R.id.window_yes);
btnYes.setOnClickListener(new
View.OnClickListener()
{
@Override
public
void
onClick(View
v)
{
Toast.makeText(mContext,
"Window
yes!",
Toast.LENGTH_LONG).show();
hideMyWindow();
}
});
Button
btnNO
=
(Button)
view.findViewById(R.id.window_no);
btnNO.setOnClickListener(new
View.OnClickListener()
{
@Override
public
void
onClick(View
v)
{
Toast.makeText(mContext,
"Window
No!",
Toast.LENGTH_LONG).show();
hideMyWindow();
}
});
//点击window窗口外围,关闭window
final
View
wView
=
view.findViewById(R.id.view_layout);
view.setOnTouchListener(new
View.OnTouchListener()
{
@Override
public
boolean
onTouch(View
v,
MotionEvent
event)
{
int
x
=
(int)
event.getX();
int
y
=
(int)
event.getY();
Rect
rect
=
new
Rect();
wView.getGlobalVisibleRect(rect);
if
(!rect.contains(x,
y))
{
hideMyWindow();
}
return
false;
}
});
return
view;
}
public
void
hideMyWindow()
{
if
(isShow
&&
mView
!=
null)
{
mwinWindowManager.removeView(mView);
isShow
=
false;
}
}
}这个就厉害了,展现,隐藏,点击监听都是自己写的方法,原来点击窗口外关闭窗口是这样实现的,是不是又学到了然后是关于:androidWindowWindowManager整理主要用于自定义控件,比如说下拉框:自定义spinner下拉框3.Activity伪弹框public
class
MyActivity
extends
Activity
{
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
//
TODO
Auto-generated
method
stub
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_activity);
}
@Override
public
boolean
onTouchEvent(MotionEvent
event)
{
this.finish();
return
true;
}
public
void
YesButton(View
v)
{
this.finish();
Toast.makeText(getApplicationContext(),
"Yes,
Hunman
is
Activity",
Toast.LENGTH_LONG).show();
}
public
void
NoButton(View
v)
{
this.finish();
Toast.makeText(getApplicationContext(),
"No,
Hunman
is
not
Activity",
Toast.LENGTH_LONG).show();
}
}简单得不能再简单,跳转跳转到另一个Activity注意点Activity主题(控制Activity为弹框样式):<activity
android:name="com.wuxianxi.hunman.smallwindows.MyActivity"
android:theme="@style/MyActivityStyle"
>
</activity>
<style
name="MyActivityStyle">
<item
name="android:windowBackground">@android:color/transparent</item>
<!--设置dialog的背景-->
<item
name="android:windowFrame">@null</item>
<!--Dialog的windowFrame框为无-->
<item
name="android:windowNoTitle">true</item>
<!--是否有title-->
<item
name="android:windowIsFloating">true</item>
<!--是否浮现在activity之上-->
<item
name="android:windowIsTranslucent">true</item>
<!--是否半透明-->
<item
name="android:windowContentOverlay">@null</item>
<!--对话框是否有遮盖,这个不设置的话,可能会出现边框黑线-->
<item
name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<!--动画-->
<item
name="android:backgroundDimEnabled">true</item>
<!--
背景是否模糊显示-->
</style>Activity伪弹框最常用,用于交互,操作较复杂的弹框,如图二补充这里可通过方法控制Activity弹框宽比
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
/**
设置宽度为屏幕的0.9*/
WindowManager
windowManager
=
getWindowManager();
/*
获取屏幕宽、高
*/
Display
display
=
windowManager.getDefaultDisplay();
/*
获取对话框当前的参数值
*/
WindowManager.LayoutParams
p
=
getWindow().getAttributes();
/*
宽度设置为屏幕的0.9
*/
p.width
=
(int)
(display.getWidth()
*
0.9);
/*
设置透明度,0.0为完全透明,1.0为完全不透明
*/
p.alpha
=
0.95f;
/*
设置布局参数
*/
getWindow().setAttributes(p);
//
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,
//
ViewGroup.LayoutParams.WRAP_CONTENT);
/*
设置点击弹框外部不可消失
*/
setFinishOnTouchOutside(false);
}最后贴上MainActivitypublic
class
MainActivity
extends
ActionBarActivity
implements
OnClickListener
{
private
Button
btnWindow;
private
Button
btnDialog;
private
Button
btnActivity;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private
void
initView()
{
btnWindow
=
(Button)
findViewById(R.id.btn_window);
btnDialog
=
(Button)
findViewById(R.id.btn_dialog);
btnActivity
=
(Button)
findViewById(R.id.btn_activity);
btnWindow.setOnClickListener(this);
btnDialog.setOnClickListener(this);
btnActivity.setOnClickListener(this);
}
@Override
public
void
onClick(View
v)
{
switch
(v.getId())
{
case
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年珠宝行业虚假鉴定查处考核试卷
- 2025年快递自动分拣设备参数调试操作考核试卷
- 2025年网络视听节目海外传播合规传媒行业文化产业发展考核试卷
- 2025年绿色建筑能源系统全生命周期评价考核试卷
- 三峡核协议书
- 无偿股权转让协议书
- 西山区毕业活动策划方案
- 三年不能离职协议书
- 粮食加工厂原材料采购合同
- 2025-2030企业直播SaaS功能需求分层与客户画像报告
- 人工智能基础与应用(第2版)全套教学课件
- 收银标准化培训课件
- 高血压与气温的关系
- 大学生活与高中生活的对比分析
- 《同人作品著作权法律问题研究》
- (新版标准日本语初级下册)第25课 教学课件 知识点+练习
- 德国企业的共同治理模式
- 集成电路器件与SPICE模型9
- 民宿经营管理培训教材
- 住院医师规范化培训临床实践能力结业考核专科技能操作评分表(皮肤科)真菌镜检
- 2022年宜昌市不动产登记中心事业单位工作人员招聘笔试试题及答案
评论
0/150
提交评论