Android 위 챗 사용자 정의 디지털 키보드 구현 코드
최종 효과:
이 사용자 정의 키 보드 를 실현 하 는 사고방식 은 매우 간단 하 다.
1.키보드 의 xml 레이아웃 구현
격자 스타일 의 레이아웃 은 GridView 나 RecyclerView 로 모두 실현 할 수 있 습 니 다.그 실 용적 인 GridView 가 더욱 편리 하지만 저 는 RecyclerView 의 용법 을 많이 익히 기 위해 RecyclerView 를 선 택 했 습 니 다.
<?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="wrap_content"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="2px"
android:background="@color/btn_gray"/>
<RelativeLayout
android:id="@+id/rl_back"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/iv_back_bg"
android:padding="10dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@mipmap/keyboard_back"/>
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/btn_gray"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/keyboard_bg"
android:overScrollMode="never"></android.support.v7.widget.RecyclerView>
</LinearLayout>
RecyclerView 는 키보드 레이아웃 을 실현 하 는 데 사용 되 며,위의 RelativeLayout 는 키보드 의 클릭 이 벤트 를 접 기 위 한 것 입 니 다.2.코드 에서 키보드 레이아웃 을 실현 하고 데 이 터 를 채 우 며 클릭 이벤트 추가
새 종류의 KeyboardView 는 RelativeLayout 에서 계승 하여 위의 레이아웃 파일 과 연결 한 다음 에 초기 화 작업 을 합 니 다.RecyclerView 에 데 이 터 를 채 우 고 어댑터 를 설정 하 며 나타 나 고 사라 지 는 애니메이션 효 과 를 설정 하고 사용 할 수 있 는 방법 을 쓰 는 등 입 니 다.
public class KeyboardView extends RelativeLayout {
private RelativeLayout rlBack;
private RecyclerView recyclerView;
private List<String> datas;
private KeyboardAdapter adapter;
private Animation animationIn;
private Animation animationOut;
public KeyboardView(Context context) {
this(context, null);
}
public KeyboardView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public KeyboardView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs, defStyleAttr);
}
private void init(Context context, AttributeSet attrs, int defStyleAttr) {
LayoutInflater.from(context).inflate(R.layout.layout_key_board, this);
rlBack = findViewById(R.id.rl_back);
rlBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) { //
dismiss();
}
});
recyclerView = findViewById(R.id.recycler_view);
initData();
initView();
initAnimation();
}
//
private void initData() {
datas = new ArrayList<>();
for (int i = 0; i < 12; i++) {
if (i < 9) {
datas.add(String.valueOf(i + 1));
} else if (i == 9) {
datas.add(".");
} else if (i == 10) {
datas.add("0");
} else {
datas.add("");
}
}
}
//
private void initView() {
recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 3));
adapter = new KeyboardAdapter(getContext(), datas);
recyclerView.setAdapter(adapter);
}
//
private void initAnimation() {
animationIn = AnimationUtils.loadAnimation(getContext(), R.anim.keyboard_in);
animationOut = AnimationUtils.loadAnimation(getContext(), R.anim.keyboard_out);
}
//
public void show() {
startAnimation(animationIn);
setVisibility(VISIBLE);
}
//
public void dismiss() {
if (isVisible()) {
startAnimation(animationOut);
setVisibility(GONE);
}
}
//
public boolean isVisible() {
if (getVisibility() == VISIBLE) {
return true;
}
return false;
}
public void setOnKeyBoardClickListener(KeyboardAdapter.OnKeyboardClickListener listener) {
adapter.setOnKeyboardClickListener(listener);
}
public List<String> getDatas() {
return datas;
}
public RelativeLayout getRlBack() {
return rlBack;
}
}
Adapter 안 에는 간단 한 코드 가 들 어 있 습 니 다.여 기 는 붙 이지 않 습 니 다.글 끝 에 원본 다운로드 주 소 를 드 리 겠 습 니 다.지금까지 사용자 정의 디지털 키 보드 는 기본적으로 다 쓴 셈 이지 만 가장 중요 한 것 은 Edittext 와 결합 해서 사용 해 야 한다.
3.Edittext 와 결합 해서 사용
1.시스템 소프트 키보드 사용 안 함
if (Build.VERSION.SDK_INT <= 10) {
etInput.setInputType(InputType.TYPE_NULL);
} else {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
try {
Class<EditText> cls = EditText.class;
Method setShowSoftInputOnFocus = cls.getMethod("setShowSoftInputOnFocus", boolean.class);
setShowSoftInputOnFocus.setAccessible(true);
setShowSoftInputOnFocus.invoke(etInput, false);
} catch (Exception e) {
e.printStackTrace();
}
}
인터넷 에서 방법 을 찾 았 지만 Edittext 를 눌 렀 을 때 시스템 소프트 키 보드 는 여전히 팝 업 된다.마지막 으로 이 방법 을 찾 았 다.반사 로 소프트 키 보드 를 강제로 꺼 내지 않 으 면 효과 가 좋다.2.각 버튼 의 클릭 이벤트 처리
@Override
public void onKeyClick(View view, RecyclerView.ViewHolder holder, int position) {
switch (position) {
case 9: //
String num = etInput.getText().toString().trim();
if (!num.contains(datas.get(position))) {
num += datas.get(position);
etInput.setText(num);
etInput.setSelection(etInput.getText().length());
}
break;
default: //
if ("0".equals(etInput.getText().toString().trim())) { // 0 ,
break;
}
etInput.setText(etInput.getText().toString().trim() + datas.get(position));
etInput.setSelection(etInput.getText().length());
break;
}
}
@Override
public void onDeleteClick(View view, RecyclerView.ViewHolder holder, int position) {
//
String num = etInput.getText().toString().trim();
if (num.length() > 0) {
etInput.setText(num.substring(0, num.length() - 1));
etInput.setSelection(etInput.getText().length());
}
}
논리 도 매우 간단 해서 코드 를 보면 알 수 있다.최종 효 과 는 첫 번 째 그림 의 모습 이다.이 키 보드 는 간단 하 다.나중에 위 챗 이나 알 리 페 이 를 모방 한 결제 비밀번호 입력 레이아웃 을 쓸 계획 이다.
->->->클릭 하여 원본 다운로드<-<-<-
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.