您的位置:首页 > 移动开发 > Android开发

Android自定义支付宝输入软键盘

2016-12-21 16:43 651 查看
不多说,先来截图:




大致的界面就是这样了,因为没有切图,所以图片的地方用文字进行表示了。如果有需要,大家可以自己选择图片。

大致分为这几个工具类:



1.PayAdapter 主要是对数字进行赋值:

public class PayAdapter extends BaseAdapter {

private List<PayBean> beanList;
private Context context;

public PayAdapter(List<PayBean> beanList, Context context) {
this.beanList = beanList;
this.context = context;
}

@Override
public int getCount() {
return beanList.size();
}

@Override
public Object getItem(int position) {
return beanList.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_pay_num, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.tvNum.setText(beanList.get(position).getNum());
holder.tvKey.setText(beanList.get(position).getKey());

if (position == 9 || position == 11) {
holder.llInclude.setBackgroundColor(context.getResources().getColor(R.color.grayDeep));
} else {
holder.llInclude.setBackgroundColor(context.getResources().getColor(R.color.white));
}

return convertView;
}

class ViewHolder {
TextView tvNum;
TextView tvKey;
LinearLayout llInclude;

public ViewHolder(View convertView) {
tvNum = (TextView) convertView.findViewById(R.id.tv_num);
tvKey = (TextView) convertView.findViewById(R.id.tv_en_num);
llInclude = (LinearLayout) convertView.findViewById(R.id.ll_include);
}

}

}


2.PayBean就是数字的类:

public class PayBean {

private String num;
private String key;

public String getNum() {
return num;
}

public void setNum(String num) {
this.num = num;
}

public String getKey() {
return key;
}

public void setKey(String key) {
this.key = key;
}
}


3.PayWindowUtils就是软件盘Dialog:

public class PayWindwUtils {

private static List<PayBean> payList;

//标记取值的下标
private static int keyLocation = 0;

//结果
private static String result = "";

//
private static String num1 = "";
private static String num2 = "";
private static String num3 = "";
private static String num4 = "";
private static String num5 = "";
private static String num6 = "";

public static void initList() {
payList = new ArrayList<>();
PayBean payBean1 = new PayBean();
payBean1.setKey("");
payBean1.setNum("1");
payList.add(payBean1);

PayBean payBean2 = new PayBean();
payBean2.setKey("ABC");
payBean2.setNum("2");
payList.add(payBean2);

PayBean payBean3 = new PayBean();
payBean3.setKey("DEF");
payBean3.setNum("3");
payList.add(payBean3);

PayBean payBean4 = new PayBean();
payBean4.setKey("GHI");
payBean4.setNum("4");
payList.add(payBean4);

PayBean payBean5 = new PayBean();
payBean5.setKey("JKL");
payBean5.setNum("5");
payList.add(payBean5);

PayBean payBean6 = new PayBean();
payBean6.setKey("MNO");
payBean6.setNum("6");
payList.add(payBean6);

PayBean payBean7 = new PayBean();
payBean7.setKey("PQRS");
payBean7.setNum("7");
payList.add(payBean7);

PayBean payBean8 = new PayBean();
payBean8.setKey("TUV");
payBean8.setNum("8");
payList.add(payBean8);

PayBean payBean9 = new PayBean();
payBean9.setKey("WXYZ");
payBean9.setNum("9");
payList.add(payBean9);

PayBean payBean10 = new PayBean();
payBean10.setKey("");
payBean10.setNum("");
payList.add(payBean10);

PayBean payBean11 = new PayBean();
payBean11.setKey("");
payBean11.setNum("0");
payList.add(payBean11);

PayBean payBean12 = new PayBean();
payBean12.setKey("delete");
payBean12.setNum("D");
payList.add(payBean12);

}

//支付弹出框
public static void showPayDialog(final Context context, final ResultCallBack callBack) {
final AlertDialog dialog = new AlertDialog.Builder(context).create();

result = "";
keyLocation = 0;

dialog.getWindow().setWindowAnimations(R.style.PopupAnimation);
dialog.getWindow().setGravity(Gravity.BOTTOM);
dialog.show();
dialog.getWindow().setContentView(R.layout.item_pay_window);
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
dialog.getWindow().setBackgroundDrawableResource(R.color.alphaBlack);
dialog.getWindow().setLayout(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);

Window view = dialog.getWindow();

TextView tvCancel = (TextView) view.findViewById(R.id.tv_cancel);

final TextView tvNum1 = (TextView) view.findViewById(R.id.tv_1);
final TextView tvNum2 = (TextView) view.findViewById(R.id.tv_2);
final TextView tvNum3 = (TextView) view.findViewById(R.id.tv_3);
final TextView tvNum4 = (TextView) view.findViewById(R.id.tv_4);
final TextView tvNum5 = (TextView) view.findViewById(R.id.tv_5);
final TextView tvNum6 = (TextView) view.findViewById(R.id.tv_6);

initList();

PayAdapter payAdapter = new PayAdapter(payList, context);
GridView gridView = (GridView) view.findViewById(R.id.grid_pay);

gridView.setAdapter(payAdapter);

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//赋值
if (position != 11) {

if (keyLocation < 6) {
keyLocation++;
switch (keyLocation) {
case 1:
tvNum1.setBackgroundResource(R.drawable.black_dot);
num1 = payList.get(position).getNum();
break;
case 2:
tvNum2.setBackgroundResource(R.drawable.black_dot);
num2 = payList.get(position).getNum();
break;
case 3:
tvNum3.setBackgroundResource(R.drawable.black_dot);
num3 = payList.get(position).getNum();
break;
case 4:
tvNum4.setBackgroundResource(R.drawable.black_dot);
num4 = payList.get(position).getNum();
break;
case 5:
tvNum5.setBackgroundResource(R.drawable.black_dot);
num5 = payList.get(position).getNum();
break;
case 6:
tvNum6.setBackgroundResource(R.drawable.black_dot);
num6 = payList.get(position).getNum();
break;
}
}

if (keyLocation == 6) {
result += num1 + num2 + num3 + num4 + num5 + num6;
callBack.setString(result, dialog);
}

//删除
} else {
if (keyLocation >= 1) {

switch (keyLocation) {
case 1:
tvNum1.setBackgroundResource(R.color.white);
num1 = "";
break;
case 2:
tvNum2.setBackgroundResource(R.color.white);
num2 = "";
break;
case 3:
tvNum3.setBackgroundResource(R.color.white);
num3 = "";
break;
case 4:
tvNum4.setBackgroundResource(R.color.white);
num4 = "";
break;
case 5:
tvNum5.setBackgroundResource(R.color.white);
num5 = "";
break;
case 6:
tvNum6.setBackgroundResource(R.color.white);
num6 = "";
break;
}
keyLocation--;
}
}
}
});

}

}


4.ResultCallBack就是选值之后的回调:

public interface ResultCallBack {

void setString(String result, AlertDialog dialog);

}


5.PayActivity就是你需要操作的界面:

public class PayActivity extends AppCompatActivity {

private Button btnKeyBoard;
private TextView tvNum;
private ProgressDialog progressDialog;

private Handler handler = new Handler();

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pay);
btnKeyBoard = (Button) findViewById(R.id.btn_out_keyboard);
tvNum = (TextView) findViewById(R.id.tv_num);
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("提交中");
progressDialog.setCanceledOnTouchOutside(false);

btnKeyBoard.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PayWindwUtils.showPayDialog(PayActivity.this, new ResultCallBack() {
@Override
public void setString(String result, final AlertDialog dialog) {
dialog.dismiss();
progressDialog.show();
tvNum.setText(result);
}
});
}
});

}
}


布局文件:

1.软键盘Layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<!--android:background="#ffffff"-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#ffffff"
android:orientation="vertical">

<TextView
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#cccccc" />

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="40dp">

<TextView
android:id="@+id/tv_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:text="取消"
android:textSize="11sp" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="输入密码"
android:textColor="#000000" />
</RelativeLayout>

<TextView
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#cccccc" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="20dp"
android:background="@drawable/ll_stroke_bg"
android:orientation="horizontal">

<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center">

<TextView
android:id="@+id/tv_1"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_weight="1" />
</RelativeLayout>

<TextView
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="#cccccc" />

<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center">

<TextView
android:id="@+id/tv_2"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_weight="1" />
</RelativeLayout>

<TextView
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="#cccccc" />

<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center">

<TextView
android:id="@+id/tv_3"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_weight="1" />
</RelativeLayout>

<TextView
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="#cccccc" />

<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center">

<TextView
android:id="@+id/tv_4"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_weight="1" />
</RelativeLayout>

<TextView
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="#cccccc" />

<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center">

<TextView
android:id="@+id/tv_5"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_weight="1" />
</RelativeLayout>

<TextView
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:background="#cccccc" />

<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center">

<TextView
android:id="@+id/tv_6"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_weight="1" />
</RelativeLayout>

</LinearLayout>

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="right"
android:paddingRight="10dp"
android:text="忘记密码?"
android:textColor="#0000ff" />

<GridView
android:id="@+id/grid_pay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:numColumns="3"></GridView>

</LinearLayout>

</RelativeLayout>


2.PayActivity的Layout:

<?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"
android:orientation="vertical">

<Button
android:id="@+id/btn_out_keyboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="弹出输入框" />

<TextView
android:id="@+id/tv_num"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" />

</LinearLayout>


至于其他的一些自定义的Drawable 大家可以自己定义一下。代码比较简单,功能也可以根据需求自己进行修改和增加。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: