이제 많은 앱에서 결제 및 비밀번호 입력 기능을 위해 맞춤 숫자 키보드를 사용하므로 편리하고 실용적입니다. 다음 기사에서는 Android 위챗 결제 숫자 키보드 기능을 소개하는데, 이는 매우 좋습니다. 관심 있는 친구들, 함께 배워보세요
WeChat의 숫자 키보드를 모방하여 자신의 프로젝트에 직접 사용하는 방법을 배워 보세요
다음 렌더링을 먼저 보세요.
1. 사용자 정의 레이아웃
<?xml version="1.0" encoding="utf-8"?> <relativelayout android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- 输入键盘 --> <gridview android:id="@+id/gv_keybord" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignparentbottom="true" android:background="#bdbdbd" android:horizontalspacing="1px" android:numcolumns="3" android:verticalspacing="1px"></gridview> <view android:id="@+id/line" android:layout_width="match_parent" android:layout_height="1px" android:layout_above="@id/gv_keybord" android:background="#bdbdbd"></view> <relativelayout android:id="@+id/layoutBack" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@id/line" android:background="#f5f5f5" android:padding="10dp"> <imageview android:id="@+id/imgBack" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerinparent="true" android:src="@mipmap/keyboard_back_img"></imageview> </relativelayout> <view android:layout_width="match_parent" android:layout_height="1px" android:layout_above="@id/layoutBack" android:layout_margintop="1dp" android:background="#bdbdbd"></view> </relativelayout>
키보드 레이아웃은 기본적으로 4X3 그리드 레이아웃의 GridView입니다. 🎜>2. 숫자 키보드 콘텐츠 구현
import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.GridView; import android.widget.RelativeLayout; import com.lnyp.pswkeyboard.R; import com.lnyp.pswkeyboard.adapter.KeyBoardAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; /** * 虚拟键盘 */ public class VirtualKeyboardView extends RelativeLayout implements View.OnClickListener { Context context; private GridView gridView; private RelativeLayout layoutBack; private ArrayList<map>> valueList; public VirtualKeyboardView(Context context) { this(context, null); } public VirtualKeyboardView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; View view = View.inflate(context, R.layout.layout_virtual_keyboard, null); valueList = new ArrayList(); layoutBack = (RelativeLayout) view.findViewById(R.id.layoutBack); layoutBack.setOnClickListener(this); gridView = (GridView) view.findViewById(R.id.gv_keybord); setView(); addView(view); } public RelativeLayout getLayoutBack() { return layoutBack; } public ArrayList<map>> getValueList() { return valueList; } public GridView getGridView() { return gridView; } private void setView() { /* 初始化按钮上应该显示的数字 */ for (int i = 1; i map = new HashMap<string>(); if (i <strong> 어댑터가 이를 어떻게 처리하는지 살펴보겠습니다. KeyBoardAdapter .java</strong><pre class="brush:php;toolbar:false">import android.content.Context; import android.graphics.Color; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.RelativeLayout; import android.widget.TextView; import com.lnyp.pswkeyboard.R; import java.util.ArrayList; import java.util.Map; /** * 九宫格键盘适配器 */ public class KeyBoardAdapter extends BaseAdapter { private Context mContext; private ArrayList<map>> valueList; public KeyBoardAdapter(Context mContext, ArrayList<map>> valueList) { this.mContext = mContext; this.valueList = valueList; } @Override public int getCount() { return valueList.size(); } @Override public Object getItem(int position) { return valueList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { convertView = View.inflate(mContext, R.layout.grid_item_virtual_keyboard, null); viewHolder = new ViewHolder(); viewHolder.btnKey = (TextView) convertView.findViewById(R.id.btn_keys); viewHolder.imgDelete = (RelativeLayout) convertView.findViewById(R.id.imgDelete); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } if (position == 9) { viewHolder.imgDelete.setVisibility(View.INVISIBLE); viewHolder.btnKey.setVisibility(View.VISIBLE); viewHolder.btnKey.setText(valueList.get(position).get("name")); viewHolder.btnKey.setBackgroundColor(Color.parseColor("#e0e0e0")); } else if (position == 11) { viewHolder.btnKey.setBackgroundResource(R.mipmap.keyboard_delete_img); viewHolder.imgDelete.setVisibility(View.VISIBLE); viewHolder.btnKey.setVisibility(View.INVISIBLE); } else { viewHolder.imgDelete.setVisibility(View.INVISIBLE); viewHolder.btnKey.setVisibility(View.VISIBLE); viewHolder.btnKey.setText(valueList.get(position).get("name")); } return convertView; } /** * 存放控件 */ public final class ViewHolder { public TextView btnKey; public RelativeLayout imgDelete; } }</map></map>어댑터를 살펴보기 전에 먼저 살펴보겠습니다. Grid_item_virtual_keyboard 구현 방법:
<?xml version="1.0" encoding="utf-8"?> <relativelayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#e0e0e0"> <textview android:id="@+id/btn_keys" android:layout_width="match_parent" android:layout_height="60dp" android:layout_centerinparent="true" android:background="@drawable/selector_gird_item" android:gravity="center" android:includefontpadding="false" android:textcolor="#333333" android:textsize="26sp"></textview> <relativelayout android:id="@+id/imgDelete" android:layout_width="wrap_content" android:layout_height="60dp" android:layout_centerinparent="true"> <imageview android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerinparent="true" android:src="@mipmap/keyboard_delete_img"></imageview> </relativelayout> </relativelayout>보시다시피 항목 레이아웃 파일에 두 개의 뷰를 지정했습니다. 하나는 일반적으로 숫자를 표시하는 TextView이고 다른 하나는 마지막으로 삭제된 키를 표시하는 RelativeLayout입니다. >그리고 KeyBoardAdapter의 getView 메소드에서는 위치에 따라 레이아웃을 다르게 처리합니다. position이 아래쪽에서 3번째 버튼인 9인 경우, position이 12인 경우 버튼 색상을 별도로 설정해야 합니다. 마지막 버튼이 있는 경우, 삭제 버튼이 표시되고 숫자 버튼이 숨겨지도록 제어해야 합니다.
3. 키보드 이벤트 로직 사용 및 구현
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#efefef" tools:context="com.lnyp.pswkeyboard.NormalKeyBoardActivity"> <edittext android:id="@+id/textAmount" android:layout_width="match_parent" android:layout_height="50dp" android:background="#FFFFFF" android:inputtype="numberDecimal" android:padding="14dp" android:textcolor="#333333" android:textsize="16sp"></edittext> <com.lnyp.pswkeyboard.widget.virtualkeyboardview android:id="@+id/virtualKeyboardView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom"></com.lnyp.pswkeyboard.widget.virtualkeyboardview> </relativelayout>활동:
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.text.Editable; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.EditText; import android.widget.GridView; import com.lnyp.pswkeyboard.widget.VirtualKeyboardView; import java.util.ArrayList; import java.util.Map; public class NormalKeyBoardActivity extends AppCompatActivity { private VirtualKeyboardView virtualKeyboardView; private GridView gridView; private ArrayList<map>> valueList; private EditText textAmount; private Animation enterAnim; private Animation exitAnim; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_normal_key_board); valueList = virtualKeyboardView.getValueList(); initAnim(); initView(); } private void initAnim() { enterAnim = AnimationUtils.loadAnimation(this, R.anim.push_bottom_in); exitAnim = AnimationUtils.loadAnimation(this, R.anim.push_bottom_out); } private void initView() { virtualKeyboardView = (VirtualKeyboardView) findViewById(R.id.virtualKeyboardView); textAmount = (EditText) findViewById(R.id.textAmount); virtualKeyboardView.getLayoutBack().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { virtualKeyboardView.startAnimation(exitAnim); virtualKeyboardView.setVisibility(View.GONE); } }); gridView = virtualKeyboardView.getGridView(); gridView.setOnItemClickListener(onItemClickListener); textAmount.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { virtualKeyboardView.setFocusable(true); virtualKeyboardView.setFocusableInTouchMode(true); virtualKeyboardView.startAnimation(enterAnim); virtualKeyboardView.setVisibility(View.VISIBLE); } }); } private AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView> adapterView, View view, int position, long l) { if (position 0) { amount = amount.substring(0, amount.length() - 1); textAmount.setText(amount); Editable ea = textAmount.getText(); textAmount.setSelection(ea.length()); } } } } };}</map>에서 숫자 키보드를 작동합니다.
위 내용은 Android 고급 모방 WeChat 결제 숫자 키보드 기능의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

드림위버 CS6
시각적 웹 개발 도구

뜨거운 주제



