刚刚做了个自定义键盘,方法记录下来以便以后用到参考,界面主要有一个editText和键盘。刚开始的时候我是用PopupWindow做的软键盘,后来发现不好用,因为PopupWindow和
editText不在一个层,每次点击键盘时EditText就没有焦点,
如果我输入了123456,现在想在2后面输入一个小数点,结果还要点击一下editText才能获得焦点,而此时popupWindow键盘会
消失,想输入只有再次点击editText后,popupWindow键盘才能显示出来,最后也没有找到解决的办法,所以我用了第二种方法比较简单。相对布局把键盘固定在最底部,别的不多说,先上图再上代码吧。
一、这是效果图,比较丑。。。
二、这个是自定义键盘的xml文档,comm_keyboard.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="wrap_content" android:orientation="vertical" > <LinearLayout android:id="@+id/keyboard_layout" android:layout_width="match_parent" android:layout_height="225dip" android:layout_alignParentBottom="true" android:background="#f6f6f7" android:orientation="horizontal" > <TableLayout android:layout_width="0dip" android:layout_height="match_parent" android:layout_weight="1" > <TableRow> <Button android:id="@+id/custom_keyboard_btn1" android:layout_width="0dip" android:layout_height="55dip" android:layout_weight="1" android:background="@drawable/table_line_gray" android:gravity="center" android:text="1" android:textColor="#000000" android:textSize="30sp" /> <Button android:id="@+id/custom_keyboard_btn2" android:layout_width="0dip" android:layout_height="55dip" android:layout_weight="1" android:background="@drawable/table_line_gray" android:gravity="center" android:text="2" android:textColor="#000000" android:textSize="30sp" /> <Button android:id="@+id/custom_keyboard_btn3" android:layout_width="0dip" android:layout_height="55dip" android:layout_weight="1" android:background="@drawable/table_line_gray" android:gravity="center" android:text="3" android:textColor="#000000" android:textSize="30sp" /> </TableRow> <TableRow> <Button android:id="@+id/custom_keyboard_btn4" android:layout_width="0dip" android:layout_height="55dip" android:layout_weight="1" android:background="@drawable/table_line_gray" android:gravity="center" android:text="4" android:textColor="#000000" android:textSize="30sp" /> <Button android:id="@+id/custom_keyboard_btn5" android:layout_width="0dip" android:layout_height="55dip" android:layout_weight="1" android:background="@drawable/table_line_gray" android:gravity="center" android:text="5" android:textColor="#000000" android:textSize="30sp" /> <Button android:id="@+id/custom_keyboard_btn6" android:layout_width="0dip" android:layout_height="55dip" android:layout_weight="1" android:background="@drawable/table_line_gray" android:gravity="center" android:text="6" android:textColor="#000000" android:textSize="30sp" /> </TableRow> <TableRow> <Button android:id="@+id/custom_keyboard_btn7" android:layout_width="0dip" android:layout_height="55dip" android:layout_weight="1" android:background="@drawable/table_line_gray" android:gravity="center" android:text="7" android:textColor="#000000" android:textSize="30sp" /> <Button android:id="@+id/custom_keyboard_btn8" android:layout_width="0dip" android:layout_height="55dip" android:layout_weight="1" android:background="@drawable/table_line_gray" android:gravity="center" android:text="8" android:textColor="#000000" android:textSize="30sp" /> <Button android:id="@+id/custom_keyboard_btn9" android:layout_width="0dip" android:layout_height="55dip" android:layout_weight="1" android:background="@drawable/table_line_gray" android:gravity="center" android:text="9" android:textColor="#000000" android:textSize="30sp" /> </TableRow> <TableRow> <Button android:id="@+id/custom_keyboard_btn_point" android:layout_width="0dip" android:layout_height="59dip" android:layout_weight="1" android:background="@drawable/table_line_gray" android:gravity="center" android:text="." android:textColor="#000000" android:textSize="30sp" /> <Button android:id="@+id/custom_keyboard_btn0" android:layout_width="0dip" android:layout_height="59dip" android:layout_weight="1" android:background="@drawable/table_line_gray" android:gravity="center" android:text="0" android:textColor="#000000" android:textSize="30sp" /> <Button android:id="@+id/custom_keyboard_btn_system_keyboard" android:layout_width="0dip" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/table_line_gray" android:gravity="center" android:text="系统键" android:textColor="#000000" android:textSize="15sp" /> </TableRow> </TableLayout> <LinearLayout android:layout_width="90dip" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/custom_keyboard_btn_delete" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" android:background="@drawable/table_line_gray" android:gravity="center" android:text="删除" android:textColor="#000000" android:textSize="20sp" /> <Button android:id="@+id/custom_keyboard_btn_sure" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" android:background="@drawable/table_line_gray" android:gravity="center" android:text="确定" android:textSize="20sp" /> </LinearLayout> </LinearLayout> </LinearLayout>
这是activity_main.xml文档
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/input_lay" android:layout_width="match_parent" android:layout_height="50dip" android:gravity="center_vertical" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="金额:" /> <EditText android:id="@+id/ed_write_money" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入金额" /> </LinearLayout> <LinearLayout android:id="@+id/bottom_lay" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" > <include layout="@layout/comm_keyboard" /> </LinearLayout> </RelativeLayout>
这是自定义键盘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; } } }
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦