亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android自定義View仿支付寶輸入六位密碼功能

2019-12-12 05:03:13
字體:
來源:轉載
供稿:網友

跟選擇銀行卡界面類似,也是用一個PopupWindow,不過輸入密碼界面是一個自定義view,當輸入六位密碼完成后用回調在Activity中獲取到輸入的密碼并以Toast顯示密碼。效果圖如下:

自定義view布局效果圖及代碼如下:

<?xml version="1.0" encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/bg_pop_window"android:orientation="vertical"><LinearLayoutandroid:id="@+id/ll_main_password"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:background="#fff"android:orientation="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="50dp"><ImageViewandroid:id="@+id/iv_pay_back"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerVertical="true"android:layout_marginLeft="10dp"android:background="@drawable/back_white"/><TextViewandroid:id="@+id/tv_pay_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"android:layout_marginLeft="15dp"android:layout_marginTop="15dp"android:text="標題"android:textColor="#333"android:textSize="18dp"/></RelativeLayout><Viewandroid:layout_width="match_parent"android:layout_height="0.5dp"android:background="#e5e5e5"/><!-- 6位密碼框布局,需要一個圓角邊框的shape作為layout的背景 --><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:layout_marginRight="20dp"android:layout_marginTop="20dp"android:background="@drawable/shape_input_area"android:orientation="horizontal"><!-- inputType設置隱藏密碼明文textSize設置大一點,否則“點”太小了,不美觀 --><TextViewandroid:id="@+id/tv_pass1"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:inputType="numberPassword"android:paddingBottom="5dp"android:paddingTop="5dp"android:textSize="32sp"/><Viewandroid:layout_width="1dp"android:layout_height="match_parent"android:background="#e5e5e5"/><TextViewandroid:id="@+id/tv_pass2"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:inputType="numberPassword"android:paddingBottom="5dp"android:paddingTop="5dp"android:textSize="32sp"/><Viewandroid:layout_width="1dp"android:layout_height="match_parent"android:background="#e5e5e5"/><TextViewandroid:id="@+id/tv_pass3"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:inputType="numberPassword"android:paddingBottom="5dp"android:paddingTop="5dp"android:textSize="32sp"/><Viewandroid:layout_width="1dp"android:layout_height="match_parent"android:background="#e5e5e5"/><TextViewandroid:id="@+id/tv_pass4"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:inputType="numberPassword"android:paddingBottom="5dp"android:paddingTop="5dp"android:textSize="32sp"/><Viewandroid:layout_width="1dp"android:layout_height="match_parent"android:background="#e5e5e5"/><TextViewandroid:id="@+id/tv_pass5"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:inputType="numberPassword"android:paddingBottom="5dp"android:paddingTop="5dp"android:textSize="32sp"/><Viewandroid:layout_width="1dp"android:layout_height="match_parent"android:background="#e5e5e5"/><TextViewandroid:id="@+id/tv_pass6"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:inputType="numberPassword"android:paddingBottom="5dp"android:paddingTop="5dp"android:textSize="32sp"/></LinearLayout><TextViewandroid:id="@+id/tv_pay_forgetPwd"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="right"android:layout_margin="15dp"android:text="忘記密碼?"android:textColor="#354EEF"/><!-- 輸入鍵盤 --><GridViewandroid:id="@+id/gv_keybord"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/ll_main_password"android:layout_marginTop="30dp"android:horizontalSpacing="0.5dp"android:background="#8E8E8E"android:numColumns="3"android:verticalSpacing="0.5dp"/></LinearLayout></RelativeLayout>

java代碼

/*** Created by zhpan on 2016/9/25.*/public class PayView extends RelativeLayout{private MainActivity mContext;private String mStringPassword; //輸入的密碼private TextView[] mTextViewPsw; // 用數組保存6個TextViewprivate GridView mGridView; //支付鍵盤布局private ArrayList<Map<String, String>> valueList;private ImageView mImageViewCancel;private TextView mTextViewForgetPsw;private int currentIndex = -1;// 用于記錄當前輸入密碼格位置private View mView;private TextView mTextViewTitle;private TextView mTextViewDel;public PayView(Context context) {super(context, null);}public PayView(Context context, AttributeSet attrs) {super(context, attrs);mContext = (MainActivity) context;mView = View.inflate(context, R.layout.pay_view, null);valueList = new ArrayList<>();mTextViewPsw = new TextView[6];mImageViewCancel = (ImageView) mView.findViewById(R.id.iv_pay_back);mTextViewPsw[0] = (TextView) mView.findViewById(R.id.tv_pass1);mTextViewPsw[1] = (TextView) mView.findViewById(R.id.tv_pass2);mTextViewPsw[2] = (TextView) mView.findViewById(R.id.tv_pass3);mTextViewPsw[3] = (TextView) mView.findViewById(R.id.tv_pass4);mTextViewPsw[4] = (TextView) mView.findViewById(R.id.tv_pass5);mTextViewPsw[5] = (TextView) mView.findViewById(R.id.tv_pass6);mGridView = (GridView) mView.findViewById(R.id.gv_keybord);mTextViewTitle = (TextView) mView.findViewById(R.id.tv_pay_title);mTextViewForgetPsw = (TextView) mView.findViewById(R.id.tv_pay_forgetPwd);setView();addView(mView); //必須要,不然不顯示控件}// 初始化按鈕上應該顯示的數字private void setView() {for (int i = 1; i < 13; i++) {Map<String, String> map = new HashMap<>();if (i < 10) {map.put("name", String.valueOf(i));} else if (i == 10) {map.put("name", "");} else if (i == 11) {map.put("name", String.valueOf(0));} else if (i == 12) {map.put("name", "<-");}valueList.add(map);}mGridView.setAdapter(adapter);}/*** 設置監聽方法,在第6位輸入完后觸發*/public void setOnFinishInput(final OnPasswordInputFinish pass) {mTextViewPsw[5].addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {if (s.toString().length() == 1) {mStringPassword = ""; //每次觸發都要將mStringPassword置空再重新獲取,避免由于輸入刪除再輸入造成混亂for (int i = 0; i < 6; i++) {mStringPassword += mTextViewPsw[i].getText().toString().trim();}pass.inputFinish();//接口中要實現的方法,完成密碼輸入完成后的響應邏輯}}});}/*** 獲取輸入的密碼*/public String getPassword() {return mStringPassword;}/*** 返回取消支付的ImageView*/public ImageView getCancel() {return mImageViewCancel;}/*** 返回忘記密碼的TextView*/public TextView getForgetPsw() {return mTextViewForgetPsw;}/*** 返回標題的TextView*/public TextView getTitle() {return mTextViewTitle;}// GridView的適配器BaseAdapter adapter = new BaseAdapter() {@Overridepublic int getCount() {return valueList.size();}@Overridepublic Object getItem(int position) {return valueList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {convertView = View.inflate(mContext, R.layout.item_pay_gride, null);holder = new ViewHolder();holder.btnKey = (TextView) convertView.findViewById(R.id.btn_keys);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.btnKey.setText(valueList.get(position).get("name"));if (position == 9) {holder.btnKey.setBackgroundResource(R.drawable.selector_key_del);}if (position == 11) {mTextViewDel = holder.btnKey;holder.btnKey.setBackgroundResource(R.drawable.selector_key_del);}holder.btnKey.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {if (position < 11 && currentIndex != 9&&position!=9) { //點擊0-9按鈕if (currentIndex >= -1 && currentIndex < 5) { //判斷輸入位置mTextViewPsw[++currentIndex].setText(valueList.get(position).get("name"));}} else {if (position == 11) { //點擊退格鍵if (currentIndex - 1 >= -1) { // 判斷是否刪除完畢mTextViewPsw[currentIndex--].setText("");}}if(position==9){}}}});return convertView;}};static class ViewHolder {public TextView btnKey;}}

PopupWindow中直接使用該控件

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><com.example.zhpan.mypayui.PayViewandroid:id="@+id/pv_pop_win"android:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout>

MainActivity中顯示PupupWindow

public class MainActivity extends AppCompatActivity implements View.OnClickListener {private TextView mTextView;private PopupWindow mPopupWindow;private View popView;private PayView mPayView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();setListener();}private void initView() {mTextView = (TextView) findViewById(R.id.tv_main_pay);}private void setListener() {mTextView.setOnClickListener(this);}// 顯示彈窗public void showPopupWindow() {// 初始化彈窗popView = View.inflate(this, R.layout.pop_window, null);mPopupWindow = new PopupWindow(popView, ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);mPayView = (PayView) popView.findViewById(R.id.pv_pop_win);mPayView.getTitle().setText("選擇到賬銀行卡");// 設置動畫mPopupWindow.setAnimationStyle(R.style.popwin_anim_style);mPopupWindow.showAsDropDown(findViewById(R.id.ll_main), 0, 0);mPopupWindow.setOutsideTouchable(true);mPayView.setOnFinishInput(new OnPasswordInputFinish() {@Overridepublic void inputFinish() {Toast.makeText(MainActivity.this, mPayView.getPassword(), Toast.LENGTH_SHORT).show();}});mPayView.getCancel().setOnClickListener(this);mPayView.getForgetPsw().setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.tv_main_pay:showPopupWindow();break;case R.id.iv_pay_back:mPopupWindow.dismiss();break;case R.id.tv_pay_forgetPwd:Toast.makeText(MainActivity.this,"忘記密碼",Toast.LENGTH_SHORT).show();break;}}}

以上所述是小編給大家介紹的Android自定義View仿支付寶輸入六位密碼功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人欧美一区二区三区黑人孕妇| 美乳少妇欧美精品| 国产精品久久一区| 7m精品福利视频导航| 亚洲欧美色婷婷| 午夜欧美大片免费观看| 91久久精品国产91性色| 深夜福利一区二区| 欧美精品免费在线| 日韩视频一区在线| 91久久精品久久国产性色也91| 91久热免费在线视频| 成人性生交大片免费看视频直播| 国语自产偷拍精品视频偷| 日韩精品免费电影| 日韩中文字幕免费视频| 久久久人成影片一区二区三区| 日韩乱码在线视频| 亚洲xxxxx性| 精品国产999| 久久99视频免费| 成人激情视频网| 亚洲天堂免费在线| 91免费看视频.| 亚洲欧美中文日韩在线v日本| 成人免费午夜电影| 川上优av一区二区线观看| 欧美在线视频播放| 亚洲一区二区福利| 国产丝袜一区二区三区免费视频| 成人h片在线播放免费网站| 欧美裸体视频网站| 亚洲欧美国产高清va在线播| 中文字幕在线观看日韩| 欧美日韩福利电影| 亚洲成人三级在线| 精品中文字幕在线观看| 日韩欧美主播在线| 久久露脸国产精品| 欧美壮男野外gaytube| 日韩av不卡电影| 久久噜噜噜精品国产亚洲综合| …久久精品99久久香蕉国产| 成人高清视频观看www| 97视频在线观看免费| 国产精品扒开腿做爽爽爽视频| 国产精品一区二区三区免费视频| 黑人与娇小精品av专区| 亚洲精品短视频| 欧美成人精品三级在线观看| 欧美精品www| 日本欧美爱爱爱| 国产日韩欧美自拍| 国产一区二区丝袜| 久久久久中文字幕2018| 另类天堂视频在线观看| 26uuu亚洲国产精品| 日韩视频永久免费观看| 91精品视频在线| 亚洲国产精品高清久久久| 久久精品电影网| 国产91色在线|免| 国产a级全部精品| 国产精品对白刺激| 伊人一区二区三区久久精品| 国产日韩欧美视频在线| 91高清视频免费观看| 91精品美女在线| 欧美在线视频一区| 性欧美xxxx交| 国产日韩欧美在线看| 中文字幕精品—区二区| 岛国av午夜精品| 成人亚洲欧美一区二区三区| 国产成人jvid在线播放| 丁香五六月婷婷久久激情| 国产精品久久久久久久久久小说| 久久久久久网站| 久久五月天色综合| 成人中文字幕在线观看| 91探花福利精品国产自产在线| 日本午夜精品理论片a级appf发布| 亚洲福利视频免费观看| 97在线免费观看| 91精品国产91久久久| 91免费精品视频| 91亚洲人电影| 成人性教育视频在线观看| 亚洲欧洲日韩国产| 精品国产依人香蕉在线精品| 日韩大陆毛片av| 91黄色8090| 久久综合久久88| 操人视频在线观看欧美| 久久中国妇女中文字幕| 亚洲精品色婷婷福利天堂| 91视频国产一区| 国产精品成久久久久三级| 日韩美女在线播放| 午夜精品在线观看| 亚洲精品动漫100p| 国产丝袜一区视频在线观看| 亚洲视频欧洲视频| 日韩欧美在线观看视频| 欧美成aaa人片在线观看蜜臀| 欧美激情国内偷拍| 久久九九亚洲综合| 高清一区二区三区日本久| 91在线观看免费高清完整版在线观看| 在线观看国产精品日韩av| 国产噜噜噜噜久久久久久久久| 麻豆一区二区在线观看| 亚洲最新av网址| 欧美性色视频在线| 国产精品6699| 欧美亚洲国产另类| 久久九九精品99国产精品| 国产精品视频久| 国产国产精品人在线视| 久久99青青精品免费观看| 91免费欧美精品| 97婷婷大伊香蕉精品视频| 4438全国成人免费| 欧美野外wwwxxx| 2021国产精品视频| 亚洲精品mp4| 亚洲аv电影天堂网| 亚洲人成77777在线观看网| 国模吧一区二区三区| 国产精品国产三级国产aⅴ9色| 久久精品国产精品亚洲| 中文字幕无线精品亚洲乱码一区| 久久久久国色av免费观看性色| 亚洲xxxx在线| 亚洲精品国产品国语在线| 午夜精品视频在线| 亚洲欧美另类中文字幕| 国内精品国产三级国产在线专| 日本三级久久久| 欧美尺度大的性做爰视频| 日韩成人免费视频| 久久久精品久久久| 日韩国产高清污视频在线观看| 黑人巨大精品欧美一区免费视频| 亚洲人成网站在线播| 日韩精品免费综合视频在线播放| 亚洲男人天堂网| 福利微拍一区二区| 国产亚洲视频中文字幕视频| 久久精品国产一区二区电影| 欧美性猛交xxxxx水多| 日韩久久免费视频| 国产精品wwww| 亚洲小视频在线| 国产精品欧美日韩久久| 国产亚洲激情在线| 中文字幕久热精品在线视频| 欧美裸体男粗大视频在线观看| 国产98色在线| 日本亚洲精品在线观看| 欧美日韩精品在线观看| 91精品啪在线观看麻豆免费| 上原亚衣av一区二区三区| 狠狠躁夜夜躁人人躁婷婷91|