gpt4 book ai didi

java - 为 EditText 实现自定义小键盘

转载 作者:行者123 更新时间:2023-11-30 11:48:18 26 4
gpt4 key购买 nike

我有一个带有小键盘(键 0-9、确定和删除)的应用程序,它始终在屏幕上可见。

当用户将焦点设置在具有数字输入法的 EditText 上时,在小键盘上按下的键应该应用到聚焦的 EditText

我目前的做法是在每个带有数字输入法的EditText上设置一个OnFocusChanged监听器,然后记住获得焦点的控件:

 EditText txt1 = (EditText) findViewById(R.id.editText1);
txt1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus)
focused = (EditText)v; // focused is a member of the Activity class
}});

然后,当按下小键盘键时,该键将应用于 focused 控件。

对我来说这似乎有点复杂,有没有一种更简单的方法可以自动(没有焦点更改监听器)在所有具有数字输入法的 EditText 小部件上工作?

其次,有没有办法为那些只有数字输入的 EditText 小部件禁用软键盘?

最佳答案

我想你可以使用 onKeyDown()为您的 EditText(我们称它为 numberBox)。

逻辑是这样的:

假设您将所有数字按钮都放在一个集合中:

private ImageButton []digitButtons = new ImageButton[10]; 

比起为每个按钮设置 onClickListeners:

private void setClickListenersForDigitButtons() {

for(int i=0; i < digitButtons.length; i++) {

int resId = getResources().getIdentifier(getPackageName()+":id/btn_digit_"+i, null, null);

digitButtons[i] = (ImageButton)findViewById(resId);

final int keyCode = KeyEvent.KEYCODE_0 + i;

digitButtons[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
keyPressed(keyCode);
}
});
}

}

在 keyPressed 方法中:

private void keyPressed(int keyCode) {

KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
numberBox.onKeyDown(keyCode, event);
}

关于java - 为 EditText 实现自定义小键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8895361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com