android 自定义键盘

刚刚做了个自定义键盘,方法记录下来以便以后用到参考,界面主要有一个editText和键盘。刚开始的时候我是用PopupWindow做的软键盘,后来发现不好用,因为PopupWindow和

editText不在一个层,每次点击键盘时EditText就没有焦点,

如果我输入了123456,现在想在2后面输入一个小数点,结果还要点击一下editText才能获得焦点,而此时popupWindow键盘会

消失,想输入只有再次点击editText后,popupWindow键盘才能显示出来,最后也没有找到解决的办法,所以我用了第二种方法比较简单。相对布局把键盘固定在最底部,别的不多说,先上图再上代码吧。

一、这是效果图,比较丑。。。

图片描述

二、这个是自定义键盘的xml文档,comm_keyboard.xml



    
        
            
                

这是activity_main.xml文档


    
        
        
    
    
        
    

这是自定义键盘Activity,,CustomKeyboardActivity

package com.example.customkeyboard;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.text.Editable;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
/**
 * 自定义键盘
 * 
 */
public class CustomKeyboardActivity extends Activity implements OnFocusChangeListener
{
    private static final String TAG = CustomKeyboardActivity.class.getName();
    public static PopupWindow popupWindow = null;
    private String str = "";
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        initView();
        initData();
    }
    protected void initData()
    {
    }
    protected void initView()
    {
    }
    /**
     * 显示公共的自定义键盘
     * 
     * @param context
     * @param ed
     */
    public void showKeyBoard(Context context, final EditText ed)
    {
        try
        {
            Button btn0 = (Button) findViewById(R.id.custom_keyboard_btn0);
            Button btn1 = (Button) findViewById(R.id.custom_keyboard_btn1);
            Button btn2 = (Button) findViewById(R.id.custom_keyboard_btn2);
            Button btn3 = (Button) findViewById(R.id.custom_keyboard_btn3);
            Button btn4 = (Button) findViewById(R.id.custom_keyboard_btn4);
            Button btn5 = (Button) findViewById(R.id.custom_keyboard_btn5);
            Button btn6 = (Button) findViewById(R.id.custom_keyboard_btn6);
            Button btn7 = (Button) findViewById(R.id.custom_keyboard_btn7);
            Button btn8 = (Button) findViewById(R.id.custom_keyboard_btn8);
            Button btn9 = (Button) findViewById(R.id.custom_keyboard_btn9);
            Button pointBtn = (Button) findViewById(R.id.custom_keyboard_btn_point);
            Button system_broad_btn = (Button) findViewById(R.id.custom_keyboard_btn_system_keyboard);
            Button deleteBtn = (Button) findViewById(R.id.custom_keyboard_btn_delete);
            Button sureBtn = (Button) findViewById(R.id.custom_keyboard_btn_sure);
            btn0.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int index = ed.getSelectionStart();// 获得光标位置
                    Editable editable = ed.getText();
                    editable.insert(index, "0");
                }
            });
            btn1.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int index = ed.getSelectionStart();
                    Editable editable = ed.getText();
                    editable.insert(index, "1");
                }
            });
            btn2.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int index = ed.getSelectionStart();
                    Editable editable = ed.getText();
                    editable.insert(index, "2");
                }
            });
            btn3.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int index = ed.getSelectionStart();
                    Editable editable = ed.getText();
                    editable.insert(index, "3");
                }
            });
            btn4.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int index = ed.getSelectionStart();
                    Editable editable = ed.getText();
                    editable.insert(index, "4");
                }
            });
            btn5.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int index = ed.getSelectionStart();
                    Editable editable = ed.getText();
                    editable.insert(index, "5");
                }
            });
            btn6.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int index = ed.getSelectionStart();
                    Editable editable = ed.getText();
                    editable.insert(index, "6");
                }
            });
            btn7.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int index = ed.getSelectionStart();
                    Editable editable = ed.getText();
                    editable.insert(index, "7");
                }
            });
            btn8.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int index = ed.getSelectionStart();
                    Editable editable = ed.getText();
                    editable.insert(index, "8");
                }
            });
            btn9.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int index = ed.getSelectionStart();
                    Editable editable = ed.getText();
                    editable.insert(index, "9");
                }
            });
            pointBtn.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int index = ed.getSelectionStart();
                    Editable editable = ed.getText();
                    editable.insert(index, ".");
                }
            });
            deleteBtn.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    str = ed.getText().toString();
                    if (str.length() > 0)
                    {
                        int index = ed.getSelectionStart();// 获取光标位置
                        Editable editable = ed.getText();
                        editable.delete(index - 1, index);
                    }
                }
            });
            system_broad_btn.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    Log.d(TAG, "系统键");
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
                }
            });
            sureBtn.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    Log.d(TAG, "确定");
                }
            });
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    @Override
    public void onFocusChange(View v, boolean hasFocus)
    {
    }
}
这是MainActivity,继承CustomKeyboardActivity 
package com.example.customkeyboard;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
public class MainActivity extends CustomKeyboardActivity implements OnClickListener
{
    private RelativeLayout parent = null;
    private EditText inputMoney;
    private LinearLayout inputLayout;
    @Override
    protected void initView()
    {
        setContentView(R.layout.activity_main);
        parent = (RelativeLayout) findViewById(R.id.main);
        inputLayout = (LinearLayout) findViewById(R.id.input_lay);
        inputMoney = (EditText) findViewById(R.id.ed_write_money);
        inputLayout = (LinearLayout) findViewById(R.id.input_lay);
        inputMoney.setOnClickListener(this);
        showKeyBoard(MainActivity.this, inputMoney);
    }
    @Override
    public void onClick(View v)
    {
        switch (v.getId())
        {
            case R.id.ed_write_money:
                // ShowPopupWindow(MainActivity.this, inputMoney, inputLayout);
                break;
        }
    }
}

原文链接:http://www.apkbus.com/blog-460955-59316.html

请使用浏览器的分享功能分享到微信等