先看下demo的效果图:
输入密码时的效果图:
项目中运用到一个支付场景:用户确认借款时需要输入密码
由于密码输入方式需要实现一个从底部弹出的效果,因此总体上采用Dialog来实现,Dialog的实现代码:
package com.example.a31210.mykeyboardpsdview.utils;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import com.example.a31210.mykeyboardpsdview.R;
/**
* Created by YuShuangPing on 2018/10/22.
*/
public class DialogUtils {
public static Dialog ShowPsdDialog(Context context, View view){
final Dialog dialog=new Dialog(context, R.style.DialogStyle2);
dialog.setCancelable(true);
dialog.setContentView(view);
Window window=dialog.getWindow();
WindowManager.LayoutParams lp=window.getAttributes();
lp.width=ScreenUtil.getScreenWidth(context);
window.setGravity(Gravity.BOTTOM);
//添加动画
window.setWindowAnimations(R.style.dialogAnim);
window.setAttributes(lp);
dialog.show();
return dialog;
}
}
自定义密码输入框的view:
package com.example.a31210.mykeyboardpsdview.view;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.example.a31210.mykeyboardpsdview.R;
/**
* Created by YuShuangPing on 2018/10/19.
*/
public class PsView extends LinearLayout {
private Context context;
private GridView gv;
private PsAdapter adapter;
private int wh;
public PsView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
this.context=context;
View view= LayoutInflater.from(context).inflate(R.layout.layout_ps_view,null);
gv= (GridView) view.findViewById(R.id.gv_p