不进入 Onkeylistener ?无法弄清楚
package woot.wat.wen;
import android.app.Activity;
import android.os.Bundle;
import android.text.Layout;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewGroup.MarginLayoutParams;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
public class HmmActivity extends Activity implements OnKeyListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//RelativeLayout Relay=(RelativeLayout) getResources().getLayout(R.layout.main);
ViewGroup group = (ViewGroup) findViewById(R.id.relativeLayout1);
TextView tv=(TextView) findViewById(R.id.tv1);
MarginLayoutParams mapara = new MarginLayoutParams(tv.getLayoutParams());
mapara.setMargins(225, 260, 120, 120);
LayoutParams params=new RelativeLayout.LayoutParams(mapara);
tv.setLayoutParams(params);
group.setFocusable(true);
group.setOnKeyListener(this);
int children = group.getChildCount();
for (int i = 0; i < children; i++) {
View child = group.getChildAt(i);
child.setFocusable(true);
child.setOnKeyListener(this);
}
//tv.setOnKeyListener(this);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// back=true;
// do something on back.
Toast.makeText(this, "Back key pressed", Toast.LENGTH_SHORT);
System.out.println("WTF");
return true;
}
else
return super.onKeyDown(keyCode, event);
}
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK /*&& event.getRepeatCount() == 0*/) {
// back=true;
// do something on back.
Log.d("backk", "goingoin backback");
return true;
}
else
// TODO Auto-generated method stub
return super.onKeyDown(keyCode, event);
//return false;
}
}
正如您在代码中看到的,我试图在按下后退键时执行某些操作,但按键代码似乎从未被使用。 无论是在模拟器还是设备中,每当按下后退键时,程序似乎都不会进入 onKey 方法。知道我做错了什么吗?
我已经放置了更新的代码。
好的,我已经创建了一个新的干净项目。这里的代码
package you.packag.namespac;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.Toast;
public class BlActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
if(keyCode==KeyEvent.KEYCODE_BACK){
Toast.makeText(this, "Back key pressed", Toast.LENGTH_SHORT);
return true; //that is important
}else
return super.onKeyDown(keyCode, event);
}
}
仍然是同样的问题。未显示 toast。每次按下 back 时,程序流程/控制都会转到 return true 和 return super 语句。真的不明白这是怎么回事应该会发生。真的让我发疯。一定是我做错了一些小事。请帮忙。
package woot.wat.wen;
import android.app.Activity;
import android.os.Bundle;
import android.text.Layout;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewGroup.MarginLayoutParams;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
public class HmmActivity extends Activity implements OnKeyListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//RelativeLayout Relay=(RelativeLayout) getResources().getLayout(R.layout.main);
ViewGroup group = (ViewGroup) findViewById(R.id.relativeLayout1);
TextView tv=(TextView) findViewById(R.id.tv1);
MarginLayoutParams mapara = new MarginLayoutParams(tv.getLayoutParams());
mapara.setMargins(225, 260, 120, 120);
LayoutParams params=new RelativeLayout.LayoutParams(mapara);
tv.setLayoutParams(params);
group.setFocusable(true);
group.setOnKeyListener(this);
int children = group.getChildCount();
for (int i = 0; i < children; i++) {
View child = group.getChildAt(i);
child.setFocusable(true);
child.setOnKeyListener(this);
}
//tv.setOnKeyListener(this);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// back=true;
// do something on back.
Toast.makeText(this, "Back key pressed", Toast.LENGTH_SHORT);
System.out.println("WTF");
return true;
}
else
return super.onKeyDown(keyCode, event);
}
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK /*&& event.getRepeatCount() == 0*/) {
// back=true;
// do something on back.
Log.d("backk", "goingoin backback");
return true;
}
else
// TODO Auto-generated method stub
return super.onKeyDown(keyCode, event);
//return false;
}
}
As you can see in the code i am trying to do something when the back key is pressed but the onkey codes never seem to be used.
The program never seems to go into onKey method whenever back is pressed,both in emulator and the device.Any idea what i am doing wrong..?
I've put the updated code.
Ok I've created a new clean project.Heres the code
package you.packag.namespac;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.Toast;
public class BlActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
if(keyCode==KeyEvent.KEYCODE_BACK){
Toast.makeText(this, "Back key pressed", Toast.LENGTH_SHORT);
return true; //that is important
}else
return super.onKeyDown(keyCode, event);
}
}
Still the same problem.The toast is not displayed.The program flow/control goes to both the return true and return super statements each time back is pressed.Dont really see how that should be happening.Really driving me crazy.Must be something small I am doing wrong.Please help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
尝试
在您的代码中执行以下操作:
1) 在 onKey 方法之前放置
@Override
2) 将
return false
更改为return super.onKey(keyCode, event)
code>另外 - 没有必要实现 OnKeyListener
Try to
Or in your code:
1) Put
@Override
before your onKey method2) change
return false
toreturn super.onKey(keyCode, event)
Also - it's not neccesary to implement OnKeyListener
尝试使用 public boolean onKeyDown( int keyCode, KeyEvent event) 来代替。
Try using public boolean onKeyDown(int keyCode, KeyEvent event) instead.
您应该重写
onKeyDown()
并设置一个onKeyDownListener
。不管怎样,你可以简单地重写onBackPressed()
。You should override
onKeyDown()
and set anonKeyDownListener
. Anyway, you can simply overrideonBackPressed()
.