Android 如果布尔值为真,则覆盖“主页”和“返回”按钮
我想知道在某些情况下是否可以覆盖“返回”和“主页”按钮的操作。通常这些按钮应该像往常一样做出反应,但在某种情况下,某些设置是真的,我想覆盖这些按钮,让它们调用我自己的方法 我使用这两种方法覆盖这些按钮:Android 如果布尔值为真,则覆盖“主页”和“返回”按钮,android,button,overriding,back-button,Android,Button,Overriding,Back Button,我想知道在某些情况下是否可以覆盖“返回”和“主页”按钮的操作。通常这些按钮应该像往常一样做出反应,但在某种情况下,某些设置是真的,我想覆盖这些按钮,让它们调用我自己的方法 我使用这两种方法覆盖这些按钮: @Override public void onBackPressed() { // call my backbutton pressed method when boolean==true } @Override public void onAttache
@Override
public void onBackPressed() {
// call my backbutton pressed method when boolean==true
}
@Override
public void onAttachedToWindow() { this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
// call my homebutton pressed method when boolean==true
}
不,你不能。您可以做的是验证该方法并管理其中的布尔值: 例如:
public void onBackPressed() { // call my backbutton pressed method when boolean==true
if (myCondition) {
// take care of my needs
} else
// call super to let the back behavior be "normal"
}
使布尔变量成为成员变量
boolean temp;
@Override
public void onBackPressed() { // call my backbutton pressed method when boolean==true
if(temp)
//your methode
else
finish();
}
关于覆盖主页按钮的行为 但是,如果你的应用程序是一个特定的应用程序,并且目标受众有限,比如跨组织应用程序、医院信息亭、餐馆点菜,你可以尝试将你的应用程序设置为主页(启动器应用程序)。你可以在这里找到一个很好的例子: 为了覆盖back key事件,这里有很多例子 例如:
您可以调用super.onBackPressed()来调用普通方法。 例如:
@Override
public void onBackPressed() {
if (activated) {
//doyourthing
} else {
super.onBackPressed()
}
}
我用这个:
public void onBackPressed() {
switch (screen) {
case 1:
screen = 99;
setContentView(R.layout.menu);
break;
case 99:
finish();
break;
}
return;
}
当我在另一个屏幕(除菜单屏幕外)时,我将变量屏幕设置为1。
当我按下后退按钮时,它会返回菜单屏幕(而不是关闭应用程序)。
并给屏幕变量99号,然后当你再次点击后退按钮时,它将关闭应用程序
但是,您无法更改“主页”按钮
我想知道在某些情况下是否可以覆盖“返回”和“主页”按钮的操作
是的,您可以覆盖Home
按钮
我已经开发了一个应用程序,可以禁用硬按钮,大家可以看看。
我使用了一个切换按钮,除了电源按钮外,它将所有硬按钮锁定在工作状态
public class DisableHardButton extends Activity {
/** Called when the activity is first created. */
TextView mTextView;
ToggleButton mToggleButton;
boolean isLock=false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView=(TextView) findViewById(R.id.tvInfo);
mToggleButton=(ToggleButton) findViewById(R.id.btnLock);
mToggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
isLock=isChecked;
onAttachedToWindow();
}
});
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if ( (event.getKeyCode() == KeyEvent.KEYCODE_HOME) && isLock) {
mTextView.setText("KEYCODE_HOME");
return true;
}
else
return super.dispatchKeyEvent(event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if( (keyCode==KeyEvent.KEYCODE_BACK) && isLock)
{
mTextView.setText("KEYCODE_BACK");
return true;
}
else
return super.onKeyDown(keyCode, event);
}
@Override
public void onAttachedToWindow()
{
System.out.println("Onactivity attached :"+isLock);
if(isLock)
{
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
else
{
this.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION);
super.onAttachedToWindow();
}
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tvInfo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<ToggleButton
android:id="@+id/btnLock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOff="UnLocked"
android:textOn="Locked" />
</LinearLayout>
哇,这太棒了,正是我想要的!我不知道这一点,以为你无法更改,+1:)IIRC这种覆盖主页按钮的方式谢天谢地,从Android 4.0开始不再有效是的,幸运的是,这种方法在Android 4.0.3上不起作用。@Commonware我添加了安卓:launchMode=“singleInstance”安卓:stateNotNeeded=“true”对于应该显示的活动,因此当单击主页时,我会得到一个选择框来选择。这是唯一的办法,先生?