数字键盘四-关于得到焦点没有在相对应的焦点下更改数字

package com.hatai.smartlokey.utils.keybord;

import android.content.Context;
import android.content.res.TypedArray;
import android.support.annotation.Nullable;
import android.text.Editable;
import android.text.InputType;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

import com.hatai.smartlokey.R;

//仅仅只用于数字键盘
public class MyNumPan extends LinearLayout implements View.OnClickListener {

    Button btn_0;
    Button btn_1;
    Button btn_2;
    Button btn_3;
    Button btn_4;
    Button btn_5;
    Button btn_6;
    Button btn_7;
    Button btn_8;
    Button btn_9;
    Button btn_complete;
    Button btn_del;
    Button btn_clear;
    private EditText editText;

    public MyNumPan(Context context) {
        this(context, null);
    }

    public void bindEditText(EditText editText) {
        this.editText = editText;

    }

    private void initView(Context context, AttributeSet attrs) {
        View view = LayoutInflater.from(context).inflate(R.layout.num_key_layout, this, true);
        btn_0 = (Button) view.findViewById(R.id.button_0);
        btn_1 = (Button) view.findViewById(R.id.button_1);
        btn_2 = (Button) view.findViewById(R.id.button_2);
        btn_3 = (Button) view.findViewById(R.id.button_3);
        btn_4 = (Button) view.findViewById(R.id.button_4);
        btn_5 = (Button) view.findViewById(R.id.button_5);
        btn_6 = (Button) view.findViewById(R.id.button_6);
        btn_7 = (Button) view.findViewById(R.id.button_7);
        btn_8 = (Button) view.findViewById(R.id.button_8);
        btn_9 = (Button) view.findViewById(R.id.button_9);
        btn_del = (Button) view.findViewById(R.id.button_del);
        btn_clear = (Button) view.findViewById(R.id.button_clear);
        btn_complete = (Button) view.findViewById(R.id.button_complete);

        TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyNumPan);
        if (array != null) {
            String string = array.getString(R.styleable.MyNumPan_button_name);
            if (!TextUtils.isEmpty(string)) {
                btn_complete.setText(string);
            } else {
                btn_complete.setText("DONE");
            }
        }
        array.recycle();
        btn_0.setOnClickListener(this);
        btn_1.setOnClickListener(this);
        btn_2.setOnClickListener(this);
        btn_3.setOnClickListener(this);
        btn_4.setOnClickListener(this);
        btn_5.setOnClickListener(this);
        btn_6.setOnClickListener(this);
        btn_7.setOnClickListener(this);
        btn_8.setOnClickListener(this);
        btn_9.setOnClickListener(this);
        btn_del.setOnClickListener(this);
        btn_clear.setOnClickListener(this);
        btn_complete.setOnClickListener(this);
    }

    View.OnClickListener completeListener;

    public void setOnCompleteListener(View.OnClickListener completeListener) {
        this.completeListener = completeListener;
    }

    public MyNumPan(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MyNumPan(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context, attrs);
    }

    @Override
    public void onClick(View v) {
        if (editText == null) {
            return;
        }
        String s = editText.getText().toString();
        int index = editText.getSelectionStart();//获取光标所在位置
        Editable edit=editText.getEditableText();
        switch (v.getId()) {
            case R.id.button_0:
                if(s.contains(".")&& s.length()-s.indexOf(".")>2){
                    return;
                }
               // editText.append("0");
             if (index<0||index>=edit.length()){
                 edit.append("0");
             }else {
                 edit.insert(index,"0");
             }
                break;
            case R.id.button_1:
                if(s.contains(".")&& s.length()-s.indexOf(".")>2){
                    return;
                }
                //editText.append("1");
                if (index<0||index>=edit.length()){
                    edit.append("1");
                }else {
                    edit.insert(index,"1");
                }
                break;
            case R.id.button_2:
                if(s.contains(".")&& s.length()-s.indexOf(".")>2){
                    return;
                }
                //editText.append("2");
                if (index<0||index>=edit.length()){
                    edit.append("2");
                }else {
                    edit.insert(index,"2");
                }
                break;
            case R.id.button_3:
                if(s.contains(".")&& s.length()-s.indexOf(".")>2){
                    return;
                }
                //editText.append("3");
                if (index<0||index>=edit.length()){
                    edit.append("3");
                }else {
                    edit.insert(index,"3");
                }
                break;
            case R.id.button_4:
                if(s.contains(".")&& s.length()-s.indexOf(".")>2){
                    return;
                }
                //editText.append("4");
                if (index<0||index>=edit.length()){
                    edit.append("4");
                }else {
                    edit.insert(index,"4");
                }
                break;
            case R.id.button_5:
                if(s.contains(".")&& s.length()-s.indexOf(".")>2){
                    return;
                }
                //editText.append("5");
                if (index<0||index>=edit.length()){
                    edit.append("5");
                }else {
                    edit.insert(index,"5");
                }
                break;
            case R.id.button_6:
                if(s.contains(".")&& s.length()-s.indexOf(".")>2){
                    return;
                }
                //editText.append("6");
                if (index<0||index>=edit.length()){
                    edit.append("6");
                }else {
                    edit.insert(index,"6");
                }
                break;
            case R.id.button_7:
                if(s.contains(".")&& s.length()-s.indexOf(".")>2){
                    return;
                }
                //editText.append("7");
                if (index<0||index>=edit.length()){
                    edit.append("7");
                }else {
                    edit.insert(index,"7");
                }
                break;
            case R.id.button_8:
                if(s.contains(".")&& s.length()-s.indexOf(".")>2){
                    return;
                }
               // editText.append("8");
                if (index<0||index>=edit.length()){
                    edit.append("8");
                }else {
                    edit.insert(index,"8");
                }
                break;
            case R.id.button_9:
                if(s.contains(".")&& s.length()-s.indexOf(".")>2){
                    return;
                }
               // editText.append("9");
                if (index<0||index>=edit.length()){
                    edit.append("9");
                }else {
                    edit.insert(index,"9");
                }
                break;
            case R.id.button_del:
                int loacation = editText.getSelectionEnd();
                Editable text = editText.getText();
                try {
                    if (text.length()>0)
                        text.delete(loacation-1, loacation);
                }catch (Exception e){

                }

                break;
            case R.id.button_clear:
                editText.setText("");
                break;
            case R.id.button_complete:
                if (completeListener != null) {
                   completeListener.onClick(v);
                }
                break;
        }
    }
}

重点更改android

  1. EditText mEditText = (EditText)findViewById(R.id.input);//EditText对象
  2. int index = mEditText.getSelectionStart();//获取光标所在位置
  3. String text="I want to input str";
  4. Editable edit = mEditText.getEditableText();//获取EditText的文字
  5. if (index < 0 || index >= edit.length() ){
  6. edit.append(text);
  7. }else{
  8. edit.insert(index,text);//光标所在位置插入文字
  9. }
  10. 在安卓中处理文本编辑的时候,咱们通常都是用EditText控件,除了基本的输入文字功能以外,咱们极可能还须要一些更灵活的功能,好比在光标所在位置插入一张图片。可是EditText自己只有追加函数append(),并无insert方法,难道要咱们本身写方法实现插入功能吗,通过研究以后发现,EditText有已经实现好了的插入方法,不过在其附属的另一个对象Editable中。经过getEditableText()方法能够得到该对象。
相关文章
相关标签/搜索