AndroID底部支付d窗实现的效果:
实现的思路:
1.通过继承PopupWindow自定义view来达到d窗的d出效果;
2.通过回调将输入的密码由d窗传入到主界面中;
2.恩,这就够了――>有些注意点在代码中备注;
自定义view的代码:
public class BottomDialogVIEw extends PopupWindow { private VIEw dialogVIEw; private EditText payPassEt; private button cancelBtn,confirmBtn; private ImageVIEw backDialogIv; public BottomDialogVIEw(Activity context,final BottomDialogonclickListener bottomDialogonclickListener) { super(context); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); dialogVIEw = inflater.inflate(R.layout.dialog,null); backDialogIv = (ImageVIEw) dialogVIEw.findVIEwByID(R.ID.backDialogIv); payPassEt = (EditText) dialogVIEw.findVIEwByID(R.ID.payPassEt); cancelBtn = (button) dialogVIEw.findVIEwByID(R.ID.cancelBtn); confirmBtn = (button) dialogVIEw.findVIEwByID(R.ID.confirmBtn); backDialogIv.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { dismiss(); } }); cancelBtn.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { dismiss(); } }); confirmBtn.setonClickListener(new OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { bottomDialogonclickListener.onPositiveClick(payPassEt.getText().toString().trim(),BottomDialogVIEw.this); } }); this.setContentVIEw(dialogVIEw); this.setWIDth(LayoutParams.MATCH_PARENT); this.setHeight(LayoutParams.MATCH_PARENT); this.setFocusable(true); this.setAnimationStyle(R.style.DialogShowStyle); //设置d出窗体动画效果 colorDrawable DW = new colorDrawable(0xb0000000); this.setBackgroundDrawable(DW); dialogVIEw.setontouchListener(new OntouchListener() { public boolean ontouch(VIEw v,MotionEvent event) { int height = dialogVIEw.findVIEwByID(R.ID.pop_layout).gettop(); int y = (int) event.getY(); if (event.getAction() == MotionEvent.ACTION_UP) { if (y < height) { //添加OntouchListener监听判断获取触屏位置如果在选择框外面则销毁d出框 // dismiss(); } } return true; } }); } }
分析:其实很简单,无法就是通过加载布局将布局装载至自定义的VIEw中。bottomDialogonclickListener 是自定义的回调接口,无法就是将值传递至主界面中。
主界面代码:
public class ShowBottomDialogAct extends AppCompatActivity { private button showBtn; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_show_bottom_dialog); showBtn = (button) findVIEwByID(R.ID.showBtn); showBtn.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { showDialog(); } }); } private voID showDialog() { DialogUtil.showBottomDialog(ShowBottomDialogAct.this,R.ID.activity_show_bottom_dialog,new BottomDialogonclickListener() { @OverrIDe public voID onPositiveClick(String contentStr,BottomDialogVIEw dialogVIEw) { dialogVIEw.dismiss(); } }); } }
分析:可以看到,主界面的代码异常简单,主要是通过自定义一个帮助类来进行d窗的显示――>因为d窗很可能在多个界面使用,所以这种写法个人还是比较喜欢的。另外通过回调将d窗对象给传输出来,以便在使用的时候根据网络请求的具体情况来控制d窗的显示与取消。
帮助类的代码:
public static voID showBottomDialog(Activity activity,int dialogLayoutID,BottomDialogonclickListener bottomDialogonclickListener){ BottomDialogVIEw bottomDialogVIEw = new BottomDialogVIEw(activity,bottomDialogonclickListener); bottomDialogVIEw.showAtLocation(activity.findVIEwByID(dialogLayoutID),Gravity.BottOM | Gravity.CENTER_HORIZONTAL,0); //设置窗口显示在parent布局的位置并显示 inputMethodManager imm = (inputMethodManager) activity.getSystemService(Context.input_METHOD_SERVICE);//自动打开软键盘 imm.toggleSoftinput(0,inputMethodManager.HIDE_NOT_ALWAYS); }
分析:两点――>1.负载布局文件;2.控制软键盘显示与关闭;
另外一个很重要的点,花了不少时间才去发现:d窗d起的时候,软键盘一般是会覆盖一部分输入框的,这是非常不好看的。之所以demo中没有出现这种情况,是通过了特殊的处理――>将整个d窗布局外包一层ScrollVIEw,这样方便软键盘d起找到输入框焦点时会将整个布局往上顶。但,这还不够,一定要在ScrollVIEw中设置一个属性:
androID:fillVIEwport="true"
最后,GitHub地址>>https://github.com/ganshenml/BottomDialogApp
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Android实现底部支付d窗效果全部内容,希望文章能够帮你解决Android实现底部支付d窗效果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)