我想制作一个自定义键盘.我不知道如何在xml和activity中做到这一点.这张照片是我的键盘型号.它只需要数字.

我重写了视图的onKeyDown方法(openGL表面视图)以捕获所有按键.问题是在几个设备上没有捕获KEYCODE_DEL.我已经尝试将onKeyListener添加到视图中,并捕获除了退格键之外的所有内容.
必须有一种方式来听这个关键的新闻事件,但是怎么样?
有人可以指向我以数字形式来自getKeyCode()的键码列表,这样,例如,如果我查看72,我看到"]",如果我查看24,我看到"vol up".
我一直在寻找一个小时,答案不是ASCII表.那太简单了...
我从鼠标呈现器上获取关键代码并尝试拦截它们.有一个键可以输出57和117,我无法拦截,我想在询问它之前解码它但找不到参考.我认为117是转变但我不知道57是什么.即使我拦截它,演示者的那个键也会把我带出我的应用程序.
我创建了customview.每当用户双击视图时,它应显示键盘,用户可以绘制新文本.
Holder是一个扩展视图的自定义视图.但它正在显示键盘.如何获取文字?
public Holder(Context context, AttributeSet attrs) {
super(context, attrs);
Log.e(TAG,"EXE");
imm = (InputMethodManager)
context. getSystemService(Context.INPUT_METHOD_SERVICE);
public boolean onDoubleTap(MotionEvent e) {
View view = Holder.this.getRootView();
imm.showSoftInput(view, InputMethodManager.SHOW_FORCED);
// imm.showSoftInput(Holder.this, InputMethodManager.SHOW_FORCED); not working
Run Code Online (Sandbox Code Playgroud) 我知道如何打开软键盘甚至处理其关键事件.我需要打开数字键盘.
PS我没有在布局文件中使用Edittexts.
这是我用来以编程方式打开键盘的代码
if (PasscodeLockUpdated.this != null) {
PasscodeLockUpdated.this .getWindow()
.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);}
Run Code Online (Sandbox Code Playgroud) android numeric-keypad android-softkeyboard programmatically-created
我有以下代码:
tv.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
switch(keyCode)
{
case KeyEvent.KEYCODE_0:
Log.v(TAG, "Keycode_0");
return true;
//break;
case KeyEvent.KEYCODE_1:
Log.v(TAG, "Keycode_1");
return true;
//break;
case KeyEvent.KEYCODE_D:
Log.v(TAG, "Keycode_D");
return true;
//break;
case KeyEvent.KEYCODE_2:
Log.v(TAG, "Keycode_2");
return true;
//break;
case KeyEvent.KEYCODE_TAB:
Log.v(TAG, "Keycode_TAB");
return true;
//break;
case KeyEvent.KEYCODE_DEL:
Log.v(TAG, "Keycode_DEL");
return true;
//break;
case KeyEvent.KEYCODE_COMMA:
Log.v(TAG, "Keycode_COMMA");
return true;
//break;
case KeyEvent.KEYCODE_ENTER:
Log.v(TAG, "KEYCODE_ENTER");
i=KeyEvent.KEYCODE_ENTER;
Log.v(TAG, "KEYCODE_ENTER"+i);
return true;
//break;
case KeyEvent.KEYCODE_SHIFT_LEFT:
Log.v(TAG, "KEYCODE_SHIFT_LEFT"+KeyEvent.KEYCODE_SHIFT_LEFT);
return true; …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Android项目,我需要检查空格键何时被按下sos我可以执行某个功能.
问题是,它正在模拟器上工作,但不在我的实际设备上.我想这可能是因为我的模拟器使用的是物理键盘,而不是屏幕上的虚拟键盘,但在实际设备上进行测试时,它使用的是虚拟键盘.
我正在尝试调度keyevent
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.KEYCODE_SPACE
&& event.getAction() == KeyEvent.ACTION_UP)
{
QueryEditor queryEditor = (QueryEditor)getSupportFragmentManager().findFragmentById(R.id.fragment_queryEditor);
queryEditor.formatQueryText();
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
我也试过按键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
disconnectDatabase();
}
else if (keyCode == KeyEvent.KEYCODE_DEL)
{
QueryEditor queryEditor = (QueryEditor)getSupportFragmentManager().findFragmentById(R.id.fragment_queryEditor);
queryEditor.formatQueryText();
}
return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)
除非按下后退按钮但我需要空格键来触发事件,否则这些都不会被触发.
感谢您的任何帮助,您可以提供.
UPDATE
下面是我如何创建QueryEditor Fragment并创建事件处理程序的代码
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
iQueryEditor = (IQueryEditor)this;
iErrorHandler = (IErrorHandler)this;
txtQueryEditor = (EditText)getActivity().findViewById(R.id.query_txtQueryEditor); …Run Code Online (Sandbox Code Playgroud) 我创建了一个自定义视图:
public class MyCustomView extends LinearLayout {...}
Run Code Online (Sandbox Code Playgroud)
当用户触摸它时,我将显示如下键盘:
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
requestFocus();
showKeyboard(true);
}
return super.onTouchEvent(event);
}
public void showKeyboard(boolean show) {
InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (show) {
imm.showSoftInput(this, InputMethodManager.SHOW_FORCED);
} else {
imm.hideSoftInputFromWindow(getWindowToken(), 0);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如何显示数字键盘,哪个用户只能输入数字,就像EditText一样?
mEditText.setInputType(InputType.TYPE_CLASS_NUMBER);
mEditText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Run Code Online (Sandbox Code Playgroud) 我为Android制作了一个自定义键盘.当我按下我的键盘的退格键我使用
getCurrentInputConnection().deleteSurroundingText(1, 0);
Run Code Online (Sandbox Code Playgroud)
从输入字段中删除一个字母.但是当我选择一些文本然后按退格按钮时,不会删除所选文本.我应该使用什么方法输入连接,以便在按退格按钮时从键盘上删除所选文本?
android ime android-input-method custom-keyword inputconnection