设为首页收藏本站
机战Z2破界篇 星组汉化 下载

星组游戏论坛

 找回密码
 注册(QQ注册+邀请注册)

QQ登录

只需一步,快速开始

查看: 1478|回复: 1

[心得] intent传值、Popwindow、正则表达式 [复制链接]

Rank: 11Rank: 11Rank: 11Rank: 11

UID
98177
星币
23
积分
9
阅读权限
90
注册时间
2013-4-11
最后登录
2014-1-16
发表于 2013-5-8 18:04:14 |显示全部楼层
Popwindow一、PopupWindow可以实现浮层效果& O2 W4 Z- V* F$ K, s* r2 P/ A* h
PopupWindow有点类似于Dialog,相同点在于都是弹出窗口,并且都可以对其进行自定义显示,并且里面的监听组件,进行相应的操作,但它与Dialog又有很大的区别,PopupWindow只是弹出窗口,不会使宿主Activity组件失去焦点,也就是说PopupWindow弹出后,你仍可以与宿主Activity进行交互,Dialog却不能做到这一点。
  ]8 W% I9 [1 R7 E3 ]二、主要方法有:& d3 P8 G* w8 I8 x& C& K# w
1、可以自定义view,通过LayoutInflator方法;
, v4 {4 F! M# y- ]2 o" ~View popupWindow_view = getLayoutInflater().inflate(R.layout.pop, null,false);4 \! s; _  \% p! r
2、可以出现和退出时显示动画;
8 {3 r9 B. e: NpopupWindow.setAnimationStyle(R.style.AnimationFade);
5 Z. I9 V: `) {1 x, }% W3、popupWindow.setOutsideTouchable(true)# G6 G4 {0 m2 R- V: @3 G
这里设置显示PopuWindow之后在外面点击是否有效。如果为false的话,那么点击PopuWindow外面并不会关闭PopuWindow。( G( }. `4 k: Z5 C+ e4 E3 Y
当然这里很明显只能在Touchable下才能使用1 f- P( |9 c6 v$ J# a7 H  x9 t- @
4、popupWindow.setFocusable(false);! v$ l* G3 e$ ~2 ~* \# r$ A1 Q
说明PopuWindow不能获得焦点,即使设置了背景不为空也不能点击外面消失,只能由dismiss()消失
0 p+ L5 a% l" d6 B6 A. _4 J3 H但是外面的View的事件还是可以触发,back键也可以顺利dismiss掉
& [" u& c4 ^0 }3 v2 X& o三、代码
5 f# y. b6 B' d6 X1、创建
0 o% M  n- e2 J/ r* T* \PopupWindow popupwind=new PopupWindow(view,宽度,高度);* H  o& L- z: I* C) s9 y! C  z
2、显示
# _8 G) d7 Y4 {6 E7 VpopupWindow.showAsDropDown(view); " l7 h* S8 v1 w5 o- B# E
或者4 ?/ G+ t( e, `/ \1 `
popupWindow.showAsDropDown(view,(screenWidth-dialgoWidth)/2, 0); 设置显示PopupWindow的位置位于View的左下方,x,y表示坐标偏移量
7 I% T  a) J# B: x6 z& C/ ?/ x) I或者0 g, |6 w# z5 P' z2 |! [: ]
popupWindow.showAtLocation(findViewById(R.id.layout),Gravity.CENTER, x, y); 表示弹出窗口以parent组件为参考,位于中间,偏移量为x,y' ]3 ]+ X. m1 I5 z9 x9 O0 i# W% w
3、消失* P5 Q9 q& H, h0 A' ~
popupwind.dismiss();! d! L$ h) W3 E# q" @# ]
4、设置背景8 ?& J6 k5 [' Z' b# F% S( p
popupwind.setBackgroundDrawable# S3 o! M; x" t
Intent传值9 V; ?) Q1 G5 J+ ]' c
一、通过putExtra()方法传值
' q4 b3 n, v# |# T传值:
6 L7 v) B$ u  v( A: jIntent intent=new Intent();
6 U" }, G- @6 Aintent.putExtra("extra", "Welcome to ..."); 传进去,extra只是一个标记( V( |6 w, Q4 j' m

$ l/ t$ S: c, E% K! M) R取值:
+ J9 j# K( O% p- t5 W' y. s+ J$ JIntent intent=getIntent();8 o: q. o7 a: m. D; i
String stringValue=intent.getStringExtra("extra"); 得到值
* h+ y5 n! H( S7 D二、对象的传值" D' _6 ~/ Y/ E; F! m2 V" p+ X
ActivityA:
. e# G) M3 J: ~, d4 J4 V2 \Intent intent=new Intent();
, D5 a3 H2 i! a; K0 U' Eintent.setClass(ActivityA.this,ActivityB.class); " @+ c2 m( Q& v' _/ Y
Student s=new Student("shao",20);+ v& y( o- |3 J
intent.putExtra("标记", s);
/ `0 t% X! R: o& R6 o( d  Q) l8 AstartActivity(intent);3 o8 ]7 W4 F/ H. X3 K' E6 a
ActivityB:
+ H' |7 E' n7 g8 FIntent intent=getIntent();
7 w. c9 O2 n' u+ n/ u8 }* OStudent s=(Student)intent.getSerializable("标记"); 5 D% A' Z, Q: q1 G) C
注意:& ^' n% k$ i% {  I8 Y$ ~
1、在android中,intent进行数据传递时,基本数据类型和对象传递的都是副本,改变传递过来的值,不会改变原来的值。
. C( q  m! q/ j2 F2、在进行对象传递的时候,该对象所对应的类要实现Serializable接口或Parcelable接口。9 M1 K- @4 d  N8 e% T9 ~1 k
3、在进行对象传递的时候,取值的时候记得强制转换
* \1 w: G( T' p- T9 X- ]8 X" t+ y三、Bundle传值
+ B4 v% A2 s! Y3 O传值:+ m0 n; y# i+ j2 q
Intent intent=new Intent();
# L  B& I& v7 Z* a) P& EBundle bundle=new Bundle();
# P) @1 W9 Y; e2 K% R! xbundle.putDouble("标记",内容);0 y- j" p6 J* e. F
bundle.putString("标记","内容");
) N3 G3 i5 a8 I5 {1 Xintent.putExtras(bundle);5 y+ v; ^! J8 z/ G$ J4 m! V: h
取值:
. B0 }0 P; }3 E0 O/ }& L! oBundle bundle=this.getIntent().getExtras();6 X6 R8 F7 H+ B) g( `
String s=bundle.getString("标记");
% R; ~7 Z& ?/ T1 B0 ]6 \Double d=bundle.getDouble("标记");
/ H& [8 t' H: A& |/ n四、Intent和Bundle的区别/ }+ Q7 M0 _2 L/ N
举个例子先:; k! D( R# P: N, V6 }2 j" k" d
我现在要从A界面 跳转到B界面或者C界面。这样的话,我就需要写2个Intent。0 v) V1 m9 {" d
如果你还要涉及的传值的话你的Intent就要写两遍添加值的方法
" a6 \6 y5 @2 O! }, z+ g那么,如果我用1个Bundle直接把值先存里边,然后再存到Intent中不就更简洁吗?
3 N4 i2 {3 C% _" U正则表达式
: L0 F0 v2 X8 J- f7 u一、利用正则表达式判断
( R: c; v% O: h2 C, N3 pPattern p; 模式对象
3 k4 R7 K* N& [3 k; P6 s  ]: fMatcher m; 匹配对象
9 Y( u1 v4 l, o$ D, i. A: q' K+ B5 up=Pattern.compile("正则表达式"); 初始化模式对象9 }, a/ U( d2 x; b. l
m=p.matcher("需要验证的内容"); 初始化匹配对象' F1 d/ L4 O1 b% r* j! P4 |7 ?9 v6 Y
m.matcher() 如果符合条件,返回true,否则返回false
) I$ b) j" C- d/ N5 u/ y# Q: d6 `m.find() 如果如果找到子序列符合匹配条件返回true
( {* }/ N; U1 i+ K2 o7 \6 r9 ~二、各种正则表达式& `3 U* {( _6 S$ ^9 W0 P1 h
1、数字、字母和下划线
4 w; P6 a9 F' K  l1 ~3 A[A-Za-z0-9_]+5 T' Z" ~, I, C5 @
2、数字和字母
5 V6 u$ h+ H& Y/ N[A-Za-z0-9]+6 j/ L6 {/ d# R" X
3、邮箱  `8 ]9 {2 P& w4 z
^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$
2 [/ v0 l* h, }, s8 W  L
头像被屏蔽

禁止发言

UID
115225
星币
59
积分
348
阅读权限
0
注册时间
2016-7-25
最后登录
2017-10-24
发表于 2016-7-29 16:28:42 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

Archiver|星组游戏论坛 ( 京公网安备110403080002 )  

GMT+8, 2018-8-17 19:46

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部