Android - 如何在虚拟键盘上按下按键?
我想写一个文字游戏。这就是为什么,在某些时候我需要在虚拟键盘上按下按键。我需要将这封信写入一个textView。不应使用EditText。我完全卡在听众等。Android - 如何在虚拟键盘上按下按键?
任何帮助,将不胜感激。
public class Oyun extends Activity implements OnKeyboardActionListener
{
@Override
public void onCreate(Bundle savedInstanceState)
{
overridePendingTransition(R.anim.push_left_in,R.anim.push_up_out);
super.onCreate(savedInstanceState);
setContentView(R.layout.oyun);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
in = this.getResources().openRawResource(R.raw.source);
reader = new BufferedReader(new InputStreamReader(in));
sayac = (TextView)findViewById(R.id.counterDown);
soru = (TextView)findViewById(R.id.Soru);
answerButton = (ImageButton)findViewById(R.id.CevapButon);
harfAlButton = (ImageButton)findViewById(R.id.HarfAlButon);
leyat = (LinearLayout)findViewById(R.id.leyat);
final MyCounter timer = new MyCounter(240000, 1000);
timer.start();
try
{
bringQuestion(reader, in);
}
catch (IOException e)
{
e.printStackTrace();
}
harfAlButton.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
harfAl();
if(alinanHarfSayisi == uzunluk)
{
alinanHarfSayisi = 0;
try
{
bringQuestion(reader, in);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
});
answerButton.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
{
letter[5].setVisibility(View.INVISIBLE);
if(keyCode==KeyEvent.KEYCODE_A)
{
letter[1].setText("A");
}
return false;
}
});
answerButton.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
/*try
{
bringQuestion(reader, in);
}
catch (IOException e)
{
e.printStackTrace();
}*/
}
});
}
public int harfAl()
{
alinanHarfSayisi++;
rand = rastgeleHarf.nextInt(uzunluk);
while(letter[rand].getText() != "")
{
rand = rastgeleHarf.nextInt(uzunluk);
}
desired = cevap.charAt(rand);
letter[rand].setText(""+ desired);
return alinanHarfSayisi;
}
public class MyCounter extends CountDownTimer
{
public MyCounter(long millisInFuture, long countDownInterval)
{
super(millisInFuture, countDownInterval);
}
@Override
public void onTick(long millisUntilFinished)
{
long minutes = millisUntilFinished/60000;
long rSeconds = millisUntilFinished%60000;
long seconds = rSeconds/1000;
if(seconds>=10)
{
sayac.setText(minutes + ":" + seconds);
}
else
{
sayac.setText(minutes + ":0" + seconds);
}
}
@Override
public void onFinish()
{
}
}
public void bringQuestion(BufferedReader rea, InputStream inputS) throws IOException
{
if (inputS!=null)
{
if ((line = rea.readLine()) != null)
{
soru.setText(line);
cevap = rea.readLine();
}
}
//is.close();
for(int i = 0; i<uzunluk; i++)
{
letter[i].setVisibility(View.GONE);
}
uzunluk = cevap.length();
letter = new TextView[uzunluk];
for(int i = 0; i<uzunluk; i++)
{
letter[i]=new TextView(this);
letter[i].setBackgroundResource(R.drawable.shape);
letter[i].setGravity(17);
letter[i].setTextColor(Color.BLACK);
letter[i].setTextSize(20);
letter[i].setTypeface(Typeface.SERIF, Typeface.BOLD);
letter[i].setText("");
this.leyat.addView(letter[i]);
}
}
@Override
public void onKey(int primaryCode, int[] keyCodes)
{
if(primaryCode==KeyEvent.KEYCODE_A)
{
letter[1].setText("B");
}
}
@Override
public void onPress(int primaryCode)
{
if(primaryCode==KeyEvent.KEYCODE_A)
{
letter[1].setText("C");
}
}
@Override
public void onRelease(int primaryCode) {
// TODO Auto-generated method stub
}
@Override
public void onText(CharSequence text) {
// TODO Auto-generated method stub
}
@Override
public void swipeDown() {
// TODO Auto-generated method stub
}
@Override
public void swipeLeft() {
// TODO Auto-generated method stub
}
@Override
public void swipeRight() {
// TODO Auto-generated method stub
}
@Override
public void swipeUp() {
// TODO Auto-generated method stub
}
}
KeyEvent
对象应该为您提供所需的功能。
如果您确实想捕获击键,则可以使用OnKeyListener。请点击此链接 Here
我试图做到这一点,但此代码不起作用。 answerButton.setOnKeyListener(新OnKeyListener(){ @覆盖 公共布尔安其(视图V,INT的keyCode,KeyEvent的事件) { 信[5] .setVisibility(View.INVISIBLE); 如果(键代码== KeyEvent.KEYCODE_A) { letter [1] .setText(“A”); } return false; } }); – beetle
我忘了expalin它,我有一个名为addCourseText的EditText,当单击enter键或d-pad时,它将调用addCourseFromTextBox函数。 – LuminiousAndroid
嘿按照此下面的代码: -
addCourseText = (EditText) findViewById(R.id.clEtAddCourse);
addCourseText.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_DOWN)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
addCourseFromTextBox();
return true;
default:
break;
}
}
return false;
}
});
为什么不的EditText使用? – user370305
当播放器单击答案按钮时,应该打开虚拟键盘,并且每个按键都必须写入textView,而不是EditText。 – beetle
只需使用EditText与android:cursorVisible =“false”,它将看起来像一个TextView ..简单:-) – user370305