Recyclerview自定義數字鍵盤
提示:這里使用recyclerview進行自定義數字鍵盤
文章目錄
- Recyclerview自定義數字鍵盤
- 一、自定義數字鍵盤效果
- 二、自定義步驟
- 1.寫adapter
- 2.activity使用
- 3.自定義的樣式
- 總結 (需要原始碼的下面有)
提示:以下是本篇文章正文內容,下面案例可供參考
一、自定義數字鍵盤效果

示例:pandas 是基于NumPy 的一種工具,該工具是為了解決資料分析任務而創建的,
二、自定義步驟
1.寫adapter
xml代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/keyboard_key"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center"
android:textColor="@color/white"
android:textSize="25sp"
android:textStyle="bold"></TextView>
</LinearLayout>
adapter代碼如下:
package com.example.demo1.adapter;
import android.content.Context;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.demo1.R;
import java.util.ArrayList;
import java.util.List;
/**
* @author : Code23
* @time : 2021/1/13
* @module : KeyBoardAdapter
* @describe :
*/
public class KeyBoardAdapter extends RecyclerView.Adapter {
private Context context;
private List<String> stringList = new ArrayList<>();
private int width;//螢屏寬度
public KeyBoardAdapter(Context context, List<String> stringList, int width) {
this.context = context;
this.stringList = stringList;
this.width = width;
}
class KeyBoardHolder extends RecyclerView.ViewHolder {
private TextView keyboardKey;
public KeyBoardHolder(@NonNull View itemView) {
super(itemView);
keyboardKey = (TextView) itemView.findViewById(R.id.keyboard_key);
}
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.adapter_keyboard, null, false);
KeyBoardHolder keyBoardHolder = new KeyBoardHolder(view);
return keyBoardHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
final KeyBoardHolder keyBoardHolder = (KeyBoardHolder) holder;
keyBoardHolder.keyboardKey.setText(stringList.get(position));
ViewGroup.LayoutParams layoutParams = keyBoardHolder.keyboardKey.getLayoutParams();
if (position != 10) {//數字鍵盤寬度和背景設定
keyBoardHolder.keyboardKey.setBackgroundResource(R.drawable.btn_gray_bg);
layoutParams.width = ((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, width / 3, context.getResources().getDisplayMetrics()));
} else {//確定鍵盤寬度和背景設定
keyBoardHolder.keyboardKey.setBackgroundResource(R.drawable.btn_blue_bg);
layoutParams.width = ((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, width - (width / 3), context.getResources().getDisplayMetrics()));
}
layoutParams.height = ((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, width / 3, context.getResources().getDisplayMetrics()));
keyBoardHolder.keyboardKey.setLayoutParams(layoutParams);
/**
* 鍵盤item點擊
*/
keyBoardHolder.keyboardKey.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (position != 10) {//數字鍵盤監聽
onClickKeyBoardListener.OnClickKeyBoard(stringList.get(position));
} else {//確認鍵盤監聽
onClickKeyBoardListener.OnClickSure();
}
}
});
/**
* 鍵盤item觸目監聽
*/
keyBoardHolder.keyboardKey.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN://按下
if (position != 10) {
keyBoardHolder.keyboardKey.setBackgroundResource(R.drawable.btn_blue_bg);
}
break;
case MotionEvent.ACTION_UP://取消or離開
case MotionEvent.ACTION_CANCEL:
if (position != 10) {
keyBoardHolder.keyboardKey.setBackgroundResource(R.drawable.btn_gray_bg);
}
break;
}
return false;
}
});
}
@Override
public int getItemCount() {
return stringList != null ? stringList.size() : 0;
}
public void setOnClickKeyBoardListener(OnClickKeyBoardListener onClickKeyBoardListener) {
this.onClickKeyBoardListener = onClickKeyBoardListener;
}
private OnClickKeyBoardListener onClickKeyBoardListener;
public interface OnClickKeyBoardListener {
void OnClickKeyBoard(String key);
void OnClickSure();
}
}
2.activity使用
xml代碼如下:
<?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:background="@color/black"
android:orientation="vertical"
android:overScrollMode="never">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_margin="20dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/numerickeyboard_inputtext"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:hint="請輸入數字"
android:maxLength="8"
android:textColor="@color/white"
android:textColorHint="@color/white"
android:textSize="25sp"></TextView>
<ImageView
android:id="@+id/numerickeyboard_clear"
android:layout_width="80dp"
android:layout_height="50dp"
android:scaleType="fitXY"
android:src="@mipmap/icon_clear"></ImageView>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/numerickeyboard_keyboardlist"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:overScrollMode="never"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:scrollbars="none"></androidx.recyclerview.widget.RecyclerView>
</LinearLayout>
activity代碼如下:
package com.example.demo1.activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.demo1.R;
import com.example.demo1.adapter.KeyBoardAdapter;
import com.example.demo1.utils.Tools;
import java.util.ArrayList;
import java.util.List;
/**
* @author : Code23
* @time : 2021/1/13
* @module : NumericKeyboardActivity
* @describe :數字鍵盤界面
*/
public class NumericKeyboardActivity extends AppCompatActivity {
private TextView numerickeyboardInputtext;
private ImageView numerickeyboardClear;
private RecyclerView numerickeyboardKeyboardlist;
private int width;//螢屏寬度
private KeyBoardAdapter keyBoardAdapter;
private List<String> stringList = new ArrayList<>();
private String inputnumber = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_numerickeyboard);
initView();
}
private void initView() {
//獲取螢屏寬度
Resources resources = this.getResources();
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
width = Tools.px2dip(this, displayMetrics.widthPixels) - 55;
numerickeyboardInputtext = (TextView) findViewById(R.id.numerickeyboard_inputtext);
numerickeyboardClear = (ImageView) findViewById(R.id.numerickeyboard_clear);
numerickeyboardKeyboardlist = (RecyclerView) findViewById(R.id.numerickeyboard_keyboardlist);
//獲取資源檔案資料
String[] keyboards = getResources().getStringArray(R.array.keyboard);
for (String key : keyboards) {
stringList.add(key);
}
//數字鍵盤串列配接器實體化
keyBoardAdapter = new KeyBoardAdapter(this,stringList, width);
final GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
gridLayoutManager.setOrientation(RecyclerView.VERTICAL);
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {//控制行數
@Override
public int getSpanSize(int position) {//最后一行占兩位置,其余占一個位置
return position != 10 ? 1 : 2;
}
});
numerickeyboardKeyboardlist.setLayoutManager(gridLayoutManager);
numerickeyboardKeyboardlist.setAdapter(keyBoardAdapter);
/**
* 數字鍵盤串列item時間監聽
*/
keyBoardAdapter.setOnClickKeyBoardListener(new KeyBoardAdapter.OnClickKeyBoardListener() {
@Override
public void OnClickKeyBoard(String key) {//數字按鈕
int lens = (inputnumber + key).length();
if (lens < 9) {
inputnumber = inputnumber + key;
numerickeyboardInputtext.setText(inputnumber);
}
}
@Override
public void OnClickSure() {//確定按鈕
Toast.makeText(NumericKeyboardActivity.this, inputnumber, Toast.LENGTH_SHORT).show();
}
});
/**
* 清除
*/
numerickeyboardClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
inputnumber = "";
numerickeyboardInputtext.setText(inputnumber);
}
});
}
}
3.自定義的樣式
1、btn_blue_bg
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="15dp"></corners>
<solid android:color="#169BD5"></solid>
</shape>
2、btn_gray_bg
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="15dp"></corners>
<solid android:color="#999999"></solid>
</shape>
3、keyboard
<string-array name="keyboard">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
<item>確定</item>
</string-array>
總結 (需要原始碼的下面有)
提示:原始碼自定義數字鍵盤
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/248625.html
標籤:其他
上一篇:Flutter 申請權限問
