Переопределить кнопку возврата домой и назад, если логическое значение истинно
Мне было интересно, могу ли я переопределить действие кнопки "Назад" и "Домой" в некоторых случаях. Обычно эти кнопки должны реагировать так же, как и всегда, но в случае, если некоторые настройки верны, я хочу переопределить кнопки и позволить им вызывать мои собственные методы.
Я использую эти два метода, чтобы переопределить эти кнопки:
@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
}
6 ответов
Мне было интересно, могу ли я переопределить действие кнопки "Назад" и "Домой" в некоторых случаях.
Да, вы можете сделать переопределение 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>
Вы вызываете super.onBackPressed() для вызова обычного метода. Пример:
@Override
public void onBackPressed() {
if (activated) {
//doyourthing
} else {
super.onBackPressed()
}
}
Нет, ты не можешь. Что вы можете сделать, так это ovveride метод и управлять логическим значением внутри него:
например:
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"
}
Что касается отмены поведения Home Button, вам не повезло.
Однако, если ваше приложение является конкретным и имеет ограниченную целевую аудиторию, такую как межорганизационное приложение, больничный киоск, заказ ресторанов, вы можете попробовать сделать свое приложение "Домашним" (приложение запуска). Вы можете найти хороший пример здесь: Как написать собственное приложение Launcher в Android
И чтобы переопределить события back key, есть много примеров.
Например:
Я использую это:
public void onBackPressed() {
switch (screen) {
case 1:
screen = 99;
setContentView(R.layout.menu);
break;
case 99:
finish();
break;
}
return;
}
Когда я нахожусь в другом экране (кроме экрана меню), я устанавливаю переменный экран в 1. Когда я нажимаю кнопку "Назад", он возвращается к экрану меню (вместо того, чтобы убивать приложение). и присвойте экранной переменной число 99, затем, когда вы снова нажмете кнопку "Назад", приложение будет убито.
Тем не менее, вы не можете изменить кнопку домой.
Сделайте вашу булеву переменную членом переменной
boolean temp;
@Override
public void onBackPressed() { // call my backbutton pressed method when boolean==true
if(temp)
//your methode
else
finish();
}