zoukankan      html  css  js  c++  java
  • 自定义数字软键盘--封装版

    布局:

    <?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">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="48dp">
    
            <TextView
                android:id="@+id/number_1"
                style="@style/number_keyboard"
                android:text="1" />
    
            <TextView
                android:id="@+id/number_2"
                style="@style/number_keyboard"
                android:text="2" />
    
            <TextView
                android:id="@+id/number_3"
                style="@style/number_keyboard"
                android:text="3" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="48dp">
    
            <TextView
                android:id="@+id/number_4"
                style="@style/number_keyboard"
                android:text="4" />
    
            <TextView
                android:id="@+id/number_5"
                style="@style/number_keyboard"
                android:text="5" />
    
            <TextView
                android:id="@+id/number_6"
                style="@style/number_keyboard"
                android:text="6" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="48dp">
    
            <TextView
                android:id="@+id/number_7"
                style="@style/number_keyboard"
                android:text="7" />
    
            <TextView
                android:id="@+id/number_8"
                style="@style/number_keyboard"
                android:text="8" />
    
            <TextView
                android:id="@+id/number_9"
                style="@style/number_keyboard"
                android:text="9" />
        </LinearLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="48dp">
    
            <ImageView
                android:id="@+id/number_clear_last"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:padding="15dp"
                android:src="@drawable/keyboard_delete_img"
                android:background="@drawable/number_keyboard_selecter"/>
    
            <TextView
                android:id="@+id/number_0"
                style="@style/number_keyboard"
                android:text="0" />
    
            <TextView
                android:id="@+id/number_enter"
                style="@style/number_keyboard_enter"
                android:text="进入"
                android:textColor="@drawable/keyboard_enter_textcolor_selecter"/>
        </LinearLayout>
    </LinearLayout>

    风格:

        <style name="number_keyboard">
            <item name="android:layout_width">0dp</item>
            <item name="android:layout_height">match_parent</item>
            <item name="android:layout_weight">1</item>
            <item name="android:textSize">24sp</item>
            <item name="android:gravity">center</item>
            <item name="android:background">@drawable/number_keyboard_selecter</item>
        </style>
    
        <style name="number_keyboard_enter">
            <item name="android:layout_width">0dp</item>
            <item name="android:layout_height">match_parent</item>
            <item name="android:layout_weight">1</item>
            <item name="android:textSize">24sp</item>
            <item name="android:gravity">center</item>
            <item name="android:background">@drawable/number_keyboard_enter_selecter</item>
        </style>

    selector

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_pressed="true">
            <shape>
                <stroke android:width="0.5dp" android:color="@color/ccccccc"></stroke>
                <solid android:color="@color/c4188fe"></solid>
            </shape>
        </item>
    
        <item android:state_pressed="false">
            <shape>
                <stroke android:width="0.5dp" android:color="@color/ccccccc"></stroke>
                <solid android:color="@color/white"></solid>
            </shape>
        </item>
    </selector>

    java类:

    public class NumberKeyboardDialog extends RelativeLayout {
    
        @BindView(R.id.number_1)
        TextView number1;
        @BindView(R.id.number_2)
        TextView number2;
        @BindView(R.id.number_3)
        TextView number3;
        @BindView(R.id.number_4)
        TextView number4;
        @BindView(R.id.number_5)
        TextView number5;
        @BindView(R.id.number_6)
        TextView number6;
        @BindView(R.id.number_7)
        TextView number7;
        @BindView(R.id.number_8)
        TextView number8;
        @BindView(R.id.number_9)
        TextView number9;
        @BindView(R.id.number_clear_last)
        ImageView numberClearLast;
        @BindView(R.id.number_0)
        TextView number0;
        @BindView(R.id.number_enter)
        TextView numberEnter;
    
        private NumberClickListener numberClickListener;
        private AlertDialog numberDialog;
    
        public NumberKeyboardDialog(Context context) {
            super(context);
        }
    
        public NumberKeyboardDialog(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public NumberKeyboardDialog(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        public void show(Context context) {
            View view = LayoutInflater.from(context).inflate(R.layout.number_keyboard, null);
            ButterKnife.bind(this, view);
            AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.DialogTheme);
            builder.setView(view);
            numberDialog = builder.create();
            BottomDialogUtils.setBottom(numberDialog);
            numberDialog.show();
        }
    
        @OnClick({R.id.number_1, R.id.number_2, R.id.number_3, R.id.number_4, R.id.number_5, R.id.number_6, R.id.number_7, R.id.number_8, R.id.number_9, R.id.number_0, R.id.number_clear_last, R.id.number_enter})
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.number_1:
                    numberClickListener.clickNumber(number1.getText().toString());
                    break;
                case R.id.number_2:
                    numberClickListener.clickNumber(number2.getText().toString());
                    break;
                case R.id.number_3:
                    numberClickListener.clickNumber(number3.getText().toString());
                    break;
                case R.id.number_4:
                    numberClickListener.clickNumber(number4.getText().toString());
                    break;
                case R.id.number_5:
                    numberClickListener.clickNumber(number5.getText().toString());
                    break;
                case R.id.number_6:
                    numberClickListener.clickNumber(number6.getText().toString());
                    break;
                case R.id.number_7:
                    numberClickListener.clickNumber(number7.getText().toString());
                    break;
                case R.id.number_8:
                    numberClickListener.clickNumber(number8.getText().toString());
                    break;
                case R.id.number_9:
                    numberClickListener.clickNumber(number9.getText().toString());
                    break;
                case R.id.number_0:
                    numberClickListener.clickNumber0(number0.getText().toString());
                    break;
                case R.id.number_clear_last:
                    numberClickListener.clickClearLast();
                    break;
                case R.id.number_enter:
                    numberClickListener.clickEnter();
                    numberDialog.dismiss();
                    break;
            }
        }
    
        @OnLongClick({R.id.number_clear_last})
        public boolean onLongClick(View view) {
            switch (view.getId()) {
                case R.id.number_clear_last:
                    numberClickListener.longClickClearLast();
                    break;
            }
            return false;
        }
    
    
        public void setNumberClickListener(NumberClickListener numberClickListener) {
            this.numberClickListener = numberClickListener;
        }
    
        public interface NumberClickListener {
            void clickNumber(String number);
    
            void clickNumber0(String number0);
    
            void clickClearLast();
    
            void longClickClearLast();
    
            void clickEnter();
        }
    }

    调用:

     /**
         * 房间号输入监听
         */
        private void setRoomNumberClear() {
            roomIdInput.addTextChangedListener(new TextWatcher() {
                private CharSequence temp;
    
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                    temp = s;
                }
    
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
    
                }
    
                @Override
                public void afterTextChanged(Editable s) {
                    if (roomIdInput.getText().toString().length() > 0) {//限制长度
                        roomIdClear.setVisibility(View.VISIBLE);
                    } else {
                        roomIdClear.setVisibility(View.GONE);
                    }
                }
            });
    
            SoftKeyBoardListener.setListener(getActivity(), new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() {
                @Override
                public void keyBoardShow(int height) {
                    if (null == getActivity()) {
                        return;
                    }
                    ((MainActivity) getActivity()).main_menu.setVisibility(View.GONE);
                    ((MainActivity) getActivity()).layoutCommunity.setVisibility(View.GONE);
                }
    
                @Override
                public void keyBoardHide(int height) {
                    if (null == getActivity()) {
                        return;
                    }
                    ((MainActivity) getActivity()).main_menu.setVisibility(View.VISIBLE);
                    ((MainActivity) getActivity()).layoutCommunity.setVisibility(View.VISIBLE);
                }
            });
        }
    
        private void initNumberListener() {
            numberDialog.setNumberClickListener(new NumberKeyboardDialog.NumberClickListener() {
                @Override
                public void clickNumber(String number) {
                    String roomInput = roomIdInput.getText().toString();
                    roomIdInput.setText(roomInput + number);
                    roomIdInput.setSelection(roomInput.length() + 1);
                }
    
                @Override
                public void clickNumber0(String number0) {
                    String roomInput = roomIdInput.getText().toString();
                    //0不能在第一位
                    if (!TextUtils.isEmpty(roomInput)) {
                        roomIdInput.setText(roomInput + number0);
                        roomIdInput.setSelection(roomInput.length() + 1);
                    }
                }
    
                @Override
                public void clickClearLast() {
                    String roomInput = roomIdInput.getText().toString();
                    if (roomIdInput.length() > 0) {
                        roomIdInput.setText(roomInput.substring(0, roomIdInput.length() - 1));
                        roomIdInput.setSelection(roomInput.length() - 1);
                    }
                }
    
                @Override
                public void longClickClearLast() {
                    roomIdInput.setText("");
                }
    
                @Override
                public void clickEnter() {
                    final String roomId = roomIdInput.getText().toString();
                    if (TextUtils.isEmpty(roomId)) {
                        Toast.makeText(getActivity(), "请输入房间号", Toast.LENGTH_SHORT).show();
                    } else {
                        LiveRoomAPI.getTopicInfo(roomId, new BaseCallBack<TopicInfoResponseEntity>() {
                            @Override
                            public void onSuccess(Response<TopicInfoResponseEntity> response) {
                                //跳转到直播间
                                Intent intent = new Intent(getActivity(), LiveroomInfoActivity.class);
                                intent.putExtra(IntentKey.topicId, roomId);
                                startActivity(intent);
                            }
    
                            @Override
                            public void onFailure(StateException exception) {
                                Toast.makeText(getActivity(), exception.getMessage().toString(), Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                }
            });
        }
    
        /**
         * 设置不调用系统键盘
         */
        private void initKeyBoard() {
            if (android.os.Build.VERSION.SDK_INT <= 10) {
                roomIdInput.setInputType(InputType.TYPE_NULL);
            } else {
                getActivity().getWindow().setSoftInputMode(
                        WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
                try {
                    Class<EditText> cls = EditText.class;
                    Method setShowSoftInputOnFocus;
                    setShowSoftInputOnFocus = cls.getMethod("setShowSoftInputOnFocus",
                            boolean.class);
                    setShowSoftInputOnFocus.setAccessible(true);
                    setShowSoftInputOnFocus.invoke(roomIdInput, false);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            initNumberListener();
        }

    封装起来更好用

  • 相关阅读:
    .NET Core开发日志——从搭建开发环境开始
    通过Docker构建TensorFlow Serving
    通过Jenkins在IIS上布署站点
    RabbitMQ in Depth札记——AMQ协议
    Web API对application/json内容类型的CORS支持
    ng-book札记——路由
    ng-book札记——HTTP
    ng-book札记——依赖注入
    UVA
    POJ
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/7451853.html
Copyright © 2011-2022 走看看