Show PopupWindow in Immersive Sticky mode
public class MainActivity extends AppCompatActivity { | |
private PopupWindow mPopupWindow; | |
@Override protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
int windowWidth = 480; | |
int windowHeight = 120; | |
TextView popupView = (TextView) LayoutInflater.from(getApplicationContext()) | |
.inflate(android.R.layout.simple_list_item_1, null); | |
popupView.setText("PopupWindow"); | |
popupView.setGravity(Gravity.CENTER); | |
popupView.setBackgroundColor(Color.BLACK); | |
popupView.setOnClickListener(new View.OnClickListener() { | |
@Override public void onClick(View v) { | |
Toast.makeText(getApplicationContext(), "PopupWindow Click", Toast.LENGTH_SHORT) | |
.show(); | |
} | |
}); | |
mPopupWindow = new PopupWindow(popupView, windowWidth, windowHeight); | |
mPopupWindow.setFocusable(false); | |
mPopupWindow.setBackgroundDrawable(new ColorDrawable()); | |
mPopupWindow.setOutsideTouchable(true); | |
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { | |
@Override public void onClick(View v) { | |
if (!mPopupWindow.isShowing()) { | |
showPopup(v); | |
} else { | |
mPopupWindow.dismiss(); | |
} | |
} | |
}); | |
} | |
@Override public void onWindowFocusChanged(boolean hasFocus) { | |
super.onWindowFocusChanged(hasFocus); | |
if (hasFocus) { | |
fullScreenImmersive(getWindow()); | |
} | |
} | |
public void showPopup(View anchor) { | |
mPopupWindow.setFocusable(false); | |
mPopupWindow.update(); | |
PopupWindowCompat.showAsDropDown(mPopupWindow, anchor, | |
-mPopupWindow.getWidth() / 2 + anchor.getWidth() / 2, | |
-mPopupWindow.getHeight() - anchor.getHeight(), Gravity.CENTER); | |
fullScreenImmersive(mPopupWindow.getContentView()); | |
mPopupWindow.setFocusable(true); | |
mPopupWindow.update(); | |
} | |
public void fullScreenImmersive(Window window) { | |
if (window != null) { | |
fullScreenImmersive(window.getDecorView()); | |
} | |
} | |
public void fullScreenImmersive(View view) { | |
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { | |
int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | |
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | |
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | |
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | |
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | |
| View.SYSTEM_UI_FLAG_FULLSCREEN; | |
view.setSystemUiVisibility(uiOptions); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment