尽管出现了 window 个弹出窗口、叠加层或对话框,但如何隐藏导航栏?
How do I hide the navigation bar despite having window popups, overlays or dialogs that appear?
我正在尝试创建一个在特定时间启动的全屏应用程序,当它启动时,它应该会自动变成全屏。全屏启动它没有问题。但是,如果存在弹出窗口或 windows,然后启动我的 activity,则导航栏永远不会隐藏(换句话说,不会实现全屏状态)。我制作了一个 5 秒的视频来演示这个问题。
您可以在此处查看错误:http://tinypic.com/player.php?v=2qkplwp%3E&s=9#.V3fZ8KLA3Fk
我已经尝试了所有带有标志的方法,但似乎无法完成。我环顾了 Playstore,似乎许多锁屏应用程序尤其可以轻松隐藏导航栏,尽管存在任何 popups\other 对话框(SlideLock、Echo Lock Screen)。
下面是我的简单activity代码:
清单中:<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
windowlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#a9e487">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Exit"
android:id="@+id/button"
android:layout_gravity="center"
android:layout_marginTop="100dp" />
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
final static WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION |
WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS |
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, //Covers status bar
PixelFormat.TRANSPARENT);
final static int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);
final View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(flags);
final ViewGroup viewGroup = (ViewGroup) getLayoutInflater().inflate(R.layout.windowlayout, null);
final WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
windowManager.addView(viewGroup, params);
viewGroup.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
windowManager.removeView(viewGroup);
}
});
}
}
在 activity.
的 onCreate method
中使用这个
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
可能我获得了与您的目标相似的行为,但由于疼痛,我的回答需要审查。
无论如何,这是我的解决方案。
我添加了两个组件:
折叠状态栏面板的方法
a listener to fire 全新activity 前面的所有活动
第一部分非常简单:您只需在 activity:
中使用此方法
private void collapseStatusBar(){
Object statusBarService = getSystemService("statusbar");
Class<?> statusBarManager = null;
try {
statusBarManager = Class.forName("android.app.StatusBarManager");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Method collapseStatusBar = null;
try {
// Prior to API 17, the method to call is 'collapse()'
// API 17 onwards, the method to call is `collapsePanels()`
if (Build.VERSION.SDK_INT > 16) {
collapseStatusBar = statusBarManager.getMethod("collapsePanels");
} else {
collapseStatusBar = statusBarManager.getMethod("collapse");
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
collapseStatusBar.setAccessible(true);
try {
collapseStatusBar.invoke(statusBarService);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
对于第二部分,您向接收器发射编程意图,以便在堆栈顶部启动您的 activity
Intent startIntent = new Intent(this, LaunchWakeupReceiver.class);
PendingIntent wakeupIntent = PendingIntent.getBroadcast(this, 0, startIntent,PendingIntent.FLAG_UPDATE_CURRENT );
AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC, (new Date()).getTime()+10000, wakeupIntent);
这是接收者:
public class LaunchWakeupReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
intent = new Intent(context,MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
因此,例如,您的主要 activity 可能是这样的:
public class MainActivity extends AppCompatActivity {
ViewGroup viewGroup;
WindowManager windowManager;
final static WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION |
WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS |
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, //Covers status bar
PixelFormat.TRANSPARENT);
final static int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
private static final String LAUNCHED = "launched";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addCoverView();
}
private void addCoverView(){
final View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(flags);
viewGroup = (ViewGroup) getLayoutInflater().inflate(R.layout.windowlayout, null);
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
final SharedPreferences shP = PreferenceManager.getDefaultSharedPreferences(this);
if (shP.contains(LAUNCHED)) {
collapseStatusBar();
windowManager.addView(viewGroup, params);
}
viewGroup.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
windowManager.removeView(viewGroup);
}
});
Intent startIntent = new Intent(this, LaunchWakeupReceiver.class);
PendingIntent wakeupIntent = PendingIntent.getBroadcast(this, 0, startIntent,PendingIntent.FLAG_UPDATE_CURRENT );
AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC, (new Date()).getTime()+10000, wakeupIntent);
shP.edit().putBoolean(LAUNCHED,true).apply();
}
private void collapseStatusBar(){
Object statusBarService = getSystemService("statusbar");
Class<?> statusBarManager = null;
try {
statusBarManager = Class.forName("android.app.StatusBarManager");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Method collapseStatusBar = null;
try {
// Prior to API 17, the method to call is 'collapse()'
// API 17 onwards, the method to call is `collapsePanels()`
if (Build.VERSION.SDK_INT > 16) {
collapseStatusBar = statusBarManager.getMethod("collapsePanels");
} else {
collapseStatusBar = statusBarManager.getMethod("collapse");
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
collapseStatusBar.setAccessible(true);
try {
collapseStatusBar.invoke(statusBarService);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
我知道这个解决方案很粗糙,但在我的测试中,它是有效的。让我知道你的想法。
编辑
接收器部分实际上只是用于测试目的。
所以 "LockActivity" 应该是这样的:
public class LockActivity extends AppCompatActivity {
ViewGroup viewGroup;
WindowManager windowManager;
final static WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION |
WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS |
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, //Covers status bar
PixelFormat.TRANSPARENT);
final static int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addCoverView();
}
private void addCoverView(){
final View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(flags);
viewGroup = (ViewGroup) getLayoutInflater().inflate(R.layout.windowlayout, null);
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
collapseStatusBar();
windowManager.addView(viewGroup, params);
viewGroup.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
windowManager.removeView(viewGroup);
}
});
}
private void collapseStatusBar(){
Object statusBarService = getSystemService("statusbar");
Class<?> statusBarManager = null;
try {
statusBarManager = Class.forName("android.app.StatusBarManager");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Method collapseStatusBar = null;
try {
// Prior to API 17, the method to call is 'collapse()'
// API 17 onwards, the method to call is `collapsePanels()`
if (Build.VERSION.SDK_INT > 16) {
collapseStatusBar = statusBarManager.getMethod("collapsePanels");
} else {
collapseStatusBar = statusBarManager.getMethod("collapse");
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
collapseStatusBar.setAccessible(true);
try {
collapseStatusBar.invoke(statusBarService);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
This worked for me:
mypopupWindow = PopupWindow(
view,
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT,
false
)
或者
mypopupWindow.isFocusable = false
我正在尝试创建一个在特定时间启动的全屏应用程序,当它启动时,它应该会自动变成全屏。全屏启动它没有问题。但是,如果存在弹出窗口或 windows,然后启动我的 activity,则导航栏永远不会隐藏(换句话说,不会实现全屏状态)。我制作了一个 5 秒的视频来演示这个问题。
您可以在此处查看错误:http://tinypic.com/player.php?v=2qkplwp%3E&s=9#.V3fZ8KLA3Fk
我已经尝试了所有带有标志的方法,但似乎无法完成。我环顾了 Playstore,似乎许多锁屏应用程序尤其可以轻松隐藏导航栏,尽管存在任何 popups\other 对话框(SlideLock、Echo Lock Screen)。
下面是我的简单activity代码:
清单中:<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
windowlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#a9e487">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Exit"
android:id="@+id/button"
android:layout_gravity="center"
android:layout_marginTop="100dp" />
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
final static WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION |
WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS |
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, //Covers status bar
PixelFormat.TRANSPARENT);
final static int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);
final View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(flags);
final ViewGroup viewGroup = (ViewGroup) getLayoutInflater().inflate(R.layout.windowlayout, null);
final WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
windowManager.addView(viewGroup, params);
viewGroup.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
windowManager.removeView(viewGroup);
}
});
}
}
在 activity.
的onCreate method
中使用这个
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
可能我获得了与您的目标相似的行为,但由于疼痛,我的回答需要审查。 无论如何,这是我的解决方案。
我添加了两个组件:
折叠状态栏面板的方法
a listener to fire 全新activity 前面的所有活动
第一部分非常简单:您只需在 activity:
中使用此方法private void collapseStatusBar(){
Object statusBarService = getSystemService("statusbar");
Class<?> statusBarManager = null;
try {
statusBarManager = Class.forName("android.app.StatusBarManager");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Method collapseStatusBar = null;
try {
// Prior to API 17, the method to call is 'collapse()'
// API 17 onwards, the method to call is `collapsePanels()`
if (Build.VERSION.SDK_INT > 16) {
collapseStatusBar = statusBarManager.getMethod("collapsePanels");
} else {
collapseStatusBar = statusBarManager.getMethod("collapse");
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
collapseStatusBar.setAccessible(true);
try {
collapseStatusBar.invoke(statusBarService);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
对于第二部分,您向接收器发射编程意图,以便在堆栈顶部启动您的 activity
Intent startIntent = new Intent(this, LaunchWakeupReceiver.class);
PendingIntent wakeupIntent = PendingIntent.getBroadcast(this, 0, startIntent,PendingIntent.FLAG_UPDATE_CURRENT );
AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC, (new Date()).getTime()+10000, wakeupIntent);
这是接收者:
public class LaunchWakeupReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
intent = new Intent(context,MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
因此,例如,您的主要 activity 可能是这样的:
public class MainActivity extends AppCompatActivity {
ViewGroup viewGroup;
WindowManager windowManager;
final static WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION |
WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS |
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, //Covers status bar
PixelFormat.TRANSPARENT);
final static int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
private static final String LAUNCHED = "launched";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addCoverView();
}
private void addCoverView(){
final View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(flags);
viewGroup = (ViewGroup) getLayoutInflater().inflate(R.layout.windowlayout, null);
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
final SharedPreferences shP = PreferenceManager.getDefaultSharedPreferences(this);
if (shP.contains(LAUNCHED)) {
collapseStatusBar();
windowManager.addView(viewGroup, params);
}
viewGroup.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
windowManager.removeView(viewGroup);
}
});
Intent startIntent = new Intent(this, LaunchWakeupReceiver.class);
PendingIntent wakeupIntent = PendingIntent.getBroadcast(this, 0, startIntent,PendingIntent.FLAG_UPDATE_CURRENT );
AlarmManager alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC, (new Date()).getTime()+10000, wakeupIntent);
shP.edit().putBoolean(LAUNCHED,true).apply();
}
private void collapseStatusBar(){
Object statusBarService = getSystemService("statusbar");
Class<?> statusBarManager = null;
try {
statusBarManager = Class.forName("android.app.StatusBarManager");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Method collapseStatusBar = null;
try {
// Prior to API 17, the method to call is 'collapse()'
// API 17 onwards, the method to call is `collapsePanels()`
if (Build.VERSION.SDK_INT > 16) {
collapseStatusBar = statusBarManager.getMethod("collapsePanels");
} else {
collapseStatusBar = statusBarManager.getMethod("collapse");
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
collapseStatusBar.setAccessible(true);
try {
collapseStatusBar.invoke(statusBarService);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
我知道这个解决方案很粗糙,但在我的测试中,它是有效的。让我知道你的想法。
编辑
接收器部分实际上只是用于测试目的。 所以 "LockActivity" 应该是这样的:
public class LockActivity extends AppCompatActivity {
ViewGroup viewGroup;
WindowManager windowManager;
final static WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS |
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION |
WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS |
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, //Covers status bar
PixelFormat.TRANSPARENT);
final static int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addCoverView();
}
private void addCoverView(){
final View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(flags);
viewGroup = (ViewGroup) getLayoutInflater().inflate(R.layout.windowlayout, null);
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
collapseStatusBar();
windowManager.addView(viewGroup, params);
viewGroup.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
windowManager.removeView(viewGroup);
}
});
}
private void collapseStatusBar(){
Object statusBarService = getSystemService("statusbar");
Class<?> statusBarManager = null;
try {
statusBarManager = Class.forName("android.app.StatusBarManager");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Method collapseStatusBar = null;
try {
// Prior to API 17, the method to call is 'collapse()'
// API 17 onwards, the method to call is `collapsePanels()`
if (Build.VERSION.SDK_INT > 16) {
collapseStatusBar = statusBarManager.getMethod("collapsePanels");
} else {
collapseStatusBar = statusBarManager.getMethod("collapse");
}
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
collapseStatusBar.setAccessible(true);
try {
collapseStatusBar.invoke(statusBarService);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
This worked for me:
mypopupWindow = PopupWindow(
view,
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT,
false
)
或者
mypopupWindow.isFocusable = false