2012-06-27 86 views
0

我想写一个文字游戏。这就是为什么,在某些时候我需要在虚拟键盘上按下按键。我需要将这封信写入一个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 

} 

} 
+0

为什么不的EditText使用? – user370305

+0

当播放器单击答案按钮时,应该打开虚拟键盘,并且每个按键都必须写入textView,而不是EditText。 – beetle

+0

只需使用EditText与android:cursorVisible =“false”,它将看起来像一个TextView ..简单:-) – user370305

回答

0

KeyEvent对象应该为您提供所需的功能。

0

如果您确实想捕获击键,则可以使用OnKeyListener。请点击此链接 Here

+0

我试图做到这一点,但此代码不起作用。 answerButton.setOnKeyListener(新OnKeyListener(){ @覆盖 公共布尔安其(视图V,INT的keyCode,KeyEvent的事件) { 信[5] .setVisibility(View.INVISIBLE); 如果(键代码== KeyEvent.KEYCODE_A) { letter [1] .setText(“A”); } return false; } }); – beetle

+0

我忘了expalin它,我有一个名为addCourseText的EditText,当单击enter键或d-pad时,它将调用addCourseFromTextBox函数。 – LuminiousAndroid

0

嘿按照此下面的代码: -

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; 
    } 
});