我想在我的android上创建自己的"主页"屏幕,我想从我的应用程序中调用该主屏幕.
如何覆盖"主页"按钮,以便在按下时应用程序将重定向到我的主屏幕而不是默认的主屏幕?是否可以覆盖主页按钮?
小智 12
覆盖以下方法.
@Override
public void onAttachedToWindow()
{
Log.i("TESTE", "onAttachedToWindow");
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
super.onAttachedToWindow();
}
Run Code Online (Sandbox Code Playgroud)
使用此方法,HOME按钮在此活动中停止工作(仅此活动).然后你重新实现,因为它是一个普通的按钮事件(例如后退按钮).
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_HOME) {
Log.i("TESTE", "BOTAO HOME");
return true;
}
return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)
bar*_*ara 10
在 AndroidManifest.xml
<activity
...
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
....
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
您需要launchMode="singleTask"将意图传递给已在运行的应用程序,而不是创建新实例.
在活动中:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (Intent.ACTION_MAIN.equals(intent.getAction())) {
Log.i("MyLauncher", "onNewIntent: HOME Key");
}
}
Run Code Online (Sandbox Code Playgroud)
你没有得到关键事件
从 Android 4.0 开始,这个答案将不再有效。
正确的解决方案是创建一个可以拦截 Home 意图的应用程序,如下面 @bara 的回答所示。
您可以像任何其他按钮一样覆盖主页按钮:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_HOME)) {
Toast.makeText(this, "You pressed the home button!", Toast.LENGTH_LONG).show();
return true;
}
return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35391 次 |
| 最近记录: |