我是Android的新手,我正在尝试创建一个应用,该应用将软键盘输入(屏幕上的android键盘,而非物理键盘)的键代码从编辑文本字段输出到文本文件。
因此,用户将文本输入到诸如“ hello World”之类的编辑文本中,而我想将每个文本的键控代码输出到文本文件中。
我最终将获得Keyup系统时间和keydown系统时间,但这是我以后遇到的问题!
我尝试了各种不同的方法,例如编写自己的软键盘并使用它,以及为每个字符使用switch语句。以下代码是我的主要活动:
package com.example.useridentificationapp;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Parcelable;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class MainActivity extends AppCompatActivity{
EditText et_name, et_content;
Button b_save;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1000);
}
et_name = (EditText) findViewById(R.id.et_name);
et_content = (EditText) findViewById(R.id.et_content);
final TextView view = (TextView) findViewById(R.id.view);
final EditText log = (EditText) findViewById(R.id.log);
b_save = (Button) findViewById(R.id.b_save);
et_content.setOnKeyListener(new View.OnKeyListener(){
public boolean onKey(View v, int keyCode, KeyEvent event) {
String keyCodeStr = KeyEvent.keyCodeToString(keyCode);
view.setText(String.valueOf(keyCodeStr));
log.setText(keyCodeStr + " " + log.getText());
return true;
}
});
b_save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String filename = et_name.getText().toString();
String content = et_content.getText().toString();
saveTextAsFile(filename, content);
}
});
}
private void saveTextAsFile (String filename, String content){
String fileName = filename + ".txt";
//create file
File file = new File (Environment.getExternalStorageDirectory().getAbsolutePath(), fileName);
//write to file
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(content.getBytes());
fos.close();
Toast.makeText(this, "Saved", Toast.LENGTH_SHORT).show();
} catch (FileNotFoundException e){
e.printStackTrace();
Toast.makeText(this, "File not found", Toast.LENGTH_SHORT).show();
} catch (IOException e){
e.printStackTrace();
Toast.makeText(this, "Error saving", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case 1000:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show();
} else{
Toast.makeText(this, "Permission Not Granted", Toast.LENGTH_SHORT).show();
finish();
}
}
}
}
上面的代码仅返回“ KEYCODE_ENTER”,“ KEYCODE_BACK”,“ KEYCODE_SHIFT”和“ KEYCODE_DELETE”。很好,但是我希望它为每次按键返回该值,例如,如果用户按键盘上的A,我希望它输出“ KEYCODE_A”。我没有在“日志”(我创建用来显示用于调试的键码的字段)中得到任何东西,对于其他任何键,它都保持为空,但是该键的确输入了该字段。
然后我要将其保存在文本文件中。
任何帮助将不胜感激!我已经阅读了有关KeyEvent和相关方法的大量Android文档,但似乎无法正常工作!
非常感谢您的帮助!我已经度过了好几天(很多小时都在互联网上寻找帮助,但无济于事!)
答案 0 :(得分:0)
尝试editText.setOnEditorActionListener
答案 1 :(得分:0)
要回答这个问题,由于Android处理软键盘输入的方式,它实际上无法完成。
要解决此问题,我必须在屏幕上重新创建按钮的键盘布局,然后才能使用。