下面列出了android.widget.FrameLayout#setOnApplyWindowInsetsListener ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@NonNull
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
NavigationFrameLayout frameLayout = new NavigationFrameLayout(requireSceneContext());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
frameLayout.setOnApplyWindowInsetsListener(new DispatchWindowInsetsListener());
}
frameLayout.setId(R.id.navigation_scene_content);
mSceneContainer = new FrameLayout(requireSceneContext());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mSceneContainer.setOnApplyWindowInsetsListener(new DispatchWindowInsetsListener());
}
frameLayout.addView(mSceneContainer, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
AnimationContainerLayout animationContainerLayout = new AnimationContainerLayout(requireSceneContext());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
animationContainerLayout.setOnApplyWindowInsetsListener(new DispatchWindowInsetsListener());
}
mAnimationContainer = animationContainerLayout;
frameLayout.addView(mAnimationContainer, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
if (mNavigationSceneOptions.drawWindowBackground()) {
ViewCompat.setBackground(frameLayout, Utility.getWindowBackground(requireSceneContext()));
}
return frameLayout;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final FrameLayout topFrameLayout = (FrameLayout) findViewById(R.id.topFrameLayout);
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
mGridViewPager = (GridViewPager) findViewById(R.id.gridViewPager);
mDotsPageIndicator = (DotsPageIndicator) findViewById(R.id.dotsPageIndicator);
mAdapter = new AttractionsGridPagerAdapter(this, mAttractions);
mAdapter.setOnChromeFadeListener(this);
mGridViewPager.setAdapter(mAdapter);
mDotsPageIndicator.setPager(mGridViewPager);
mDotsPageIndicator.setOnPageChangeListener(mAdapter);
topFrameLayout.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
@Override
public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
// Call through to super implementation
insets = topFrameLayout.onApplyWindowInsets(insets);
boolean round = insets.isRound();
// Store system window insets regardless of screen shape
mInsets.set(insets.getSystemWindowInsetLeft(),
insets.getSystemWindowInsetTop(),
insets.getSystemWindowInsetRight(),
insets.getSystemWindowInsetBottom());
if (round) {
// On a round screen calculate the square inset to use.
// Alternatively could use BoxInsetLayout, although calculating
// the inset ourselves lets us position views outside the center
// box. For example, slightly lower on the round screen (by giving
// up some horizontal space).
mInsets = Utils.calculateBottomInsetsOnRoundDevice(
getWindowManager().getDefaultDisplay(), mInsets);
// Boost the dots indicator up by the bottom inset
FrameLayout.LayoutParams params =
(FrameLayout.LayoutParams) mDotsPageIndicator.getLayoutParams();
params.bottomMargin = mInsets.bottom;
mDotsPageIndicator.setLayoutParams(params);
}
mAdapter.setInsets(mInsets);
return insets;
}
});
// Set up the DismissOverlayView
mDismissOverlayView = (DismissOverlayView) findViewById(R.id.dismiss_overlay);
mDismissOverlayView.setIntroText(getString(R.string.exit_intro_text));
mDismissOverlayView.showIntroIfNecessary();
mGestureDetector = new GestureDetectorCompat(this, new LongPressListener());
Uri attractionsUri = getIntent().getParcelableExtra(Constants.EXTRA_ATTRACTIONS_URI);
if (attractionsUri != null) {
new FetchDataAsyncTask(this).execute(attractionsUri);
UtilityService.clearNotification(this);
UtilityService.clearRemoteNotifications(this);
} else {
finish();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final FrameLayout topFrameLayout = (FrameLayout) findViewById(R.id.topFrameLayout);
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
mGridViewPager = (GridViewPager) findViewById(R.id.gridViewPager);
mDotsPageIndicator = (DotsPageIndicator) findViewById(R.id.dotsPageIndicator);
mAdapter = new AttractionsGridPagerAdapter(this, mAttractions);
mAdapter.setOnChromeFadeListener(this);
mGridViewPager.setAdapter(mAdapter);
topFrameLayout.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
@Override
public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
// Call through to super implementation
insets = topFrameLayout.onApplyWindowInsets(insets);
boolean round = insets.isRound();
// Store system window insets regardless of screen shape
mInsets.set(insets.getSystemWindowInsetLeft(),
insets.getSystemWindowInsetTop(),
insets.getSystemWindowInsetRight(),
insets.getSystemWindowInsetBottom());
if (round) {
// On a round screen calculate the square inset to use.
// Alternatively could use BoxInsetLayout, although calculating
// the inset ourselves lets us position views outside the center
// box. For example, slightly lower on the round screen (by giving
// up some horizontal space).
mInsets = Utils.calculateBottomInsetsOnRoundDevice(
getWindowManager().getDefaultDisplay(), mInsets);
// Boost the dots indicator up by the bottom inset
FrameLayout.LayoutParams params =
(FrameLayout.LayoutParams) mDotsPageIndicator.getLayoutParams();
params.bottomMargin = mInsets.bottom;
mDotsPageIndicator.setLayoutParams(params);
}
mAdapter.setInsets(mInsets);
return insets;
}
});
// Set up the DismissOverlayView
mDismissOverlayView = (DismissOverlayView) findViewById(R.id.dismiss_overlay);
mDismissOverlayView.setIntroText(getString(R.string.exit_intro_text));
mDismissOverlayView.showIntroIfNecessary();
mGestureDetector = new GestureDetectorCompat(this, new LongPressListener());
Uri attractionsUri = getIntent().getParcelableExtra(Constants.EXTRA_ATTRACTIONS_URI);
if (attractionsUri != null) {
new FetchDataAsyncTask(this).execute(attractionsUri);
UtilityService.clearNotification(this);
UtilityService.clearRemoteNotifications(this);
} else {
finish();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final FrameLayout topFrameLayout = (FrameLayout) findViewById(R.id.topFrameLayout);
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
mGridViewPager = (GridViewPager) findViewById(R.id.gridViewPager);
mDotsPageIndicator = (DotsPageIndicator) findViewById(R.id.dotsPageIndicator);
mAdapter = new AttractionsGridPagerAdapter(this, mAttractions);
mAdapter.setOnChromeFadeListener(this);
mGridViewPager.setAdapter(mAdapter);
topFrameLayout.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
@Override
public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
// Call through to super implementation
insets = topFrameLayout.onApplyWindowInsets(insets);
boolean round = insets.isRound();
// Store system window insets regardless of screen shape
mInsets.set(insets.getSystemWindowInsetLeft(),
insets.getSystemWindowInsetTop(),
insets.getSystemWindowInsetRight(),
insets.getSystemWindowInsetBottom());
if (round) {
// On a round screen calculate the square inset to use.
// Alternatively could use BoxInsetLayout, although calculating
// the inset ourselves lets us position views outside the center
// box. For example, slightly lower on the round screen (by giving
// up some horizontal space).
mInsets = Utils.calculateBottomInsetsOnRoundDevice(
getWindowManager().getDefaultDisplay(), mInsets);
// Boost the dots indicator up by the bottom inset
FrameLayout.LayoutParams params =
(FrameLayout.LayoutParams) mDotsPageIndicator.getLayoutParams();
params.bottomMargin = mInsets.bottom;
mDotsPageIndicator.setLayoutParams(params);
}
mAdapter.setInsets(mInsets);
return insets;
}
});
// Set up the DismissOverlayView
mDismissOverlayView = (DismissOverlayView) findViewById(R.id.dismiss_overlay);
mDismissOverlayView.setIntroText(getString(R.string.exit_intro_text));
mDismissOverlayView.showIntroIfNecessary();
mGestureDetector = new GestureDetectorCompat(this, new LongPressListener());
Uri attractionsUri = getIntent().getParcelableExtra(Constants.EXTRA_ATTRACTIONS_URI);
if (attractionsUri != null) {
new FetchDataAsyncTask(this).execute(attractionsUri);
UtilityService.clearNotification(this);
UtilityService.clearRemoteNotifications(this);
} else {
finish();
}
}
public void onCreate(Bundle savedState) {
super.onCreate(savedState);
// Set the layout. It only contains a SupportMapFragment and a DismissOverlay.
setContentView(R.layout.activity_main);
// Enable ambient support, so the map remains visible in simplified, low-color display
// when the user is no longer actively using the app but the app is still visible on the
// watch face.
setAmbientEnabled();
// Retrieve the containers for the root of the layout and the map. Margins will need to be
// set on them to account for the system window insets.
final FrameLayout topFrameLayout = (FrameLayout) findViewById(R.id.root_container);
final FrameLayout mapFrameLayout = (FrameLayout) findViewById(R.id.map_container);
// Set the system view insets on the containers when they become available.
topFrameLayout.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
@Override
public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
// Call through to super implementation and apply insets
insets = topFrameLayout.onApplyWindowInsets(insets);
FrameLayout.LayoutParams params =
(FrameLayout.LayoutParams) mapFrameLayout.getLayoutParams();
// Add Wearable insets to FrameLayout container holding map as margins
params.setMargins(
insets.getSystemWindowInsetLeft(),
insets.getSystemWindowInsetTop(),
insets.getSystemWindowInsetRight(),
insets.getSystemWindowInsetBottom());
mapFrameLayout.setLayoutParams(params);
return insets;
}
});
// Obtain the DismissOverlayView and display the intro help text.
mDismissOverlay = (DismissOverlayView) findViewById(R.id.dismiss_overlay);
mDismissOverlay.setIntroText(R.string.intro_text);
mDismissOverlay.showIntroIfNecessary();
// Obtain the MapFragment and set the async listener to be notified when the map is ready.
mMapFragment = (MapFragment) getFragmentManager()
.findFragmentById(R.id.map);
mMapFragment.getMapAsync(this);
}
public void setParentActivity(Activity activity) {
currentAccount = UserConfig.selectedAccount;
centerImage.setCurrentAccount(currentAccount);
centerImage.setLayerNum(7);
if (parentActivity == activity) {
return;
}
parentActivity = activity;
slideUpDrawable = parentActivity.getResources().getDrawable(R.drawable.preview_arrow);
windowView = new FrameLayout(activity);
windowView.setFocusable(true);
windowView.setFocusableInTouchMode(true);
if (Build.VERSION.SDK_INT >= 21) {
windowView.setFitsSystemWindows(true);
windowView.setOnApplyWindowInsetsListener((v, insets) -> {
lastInsets = insets;
return insets;
});
}
containerView = new FrameLayoutDrawer(activity);
containerView.setFocusable(false);
windowView.addView(containerView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT));
containerView.setOnTouchListener((v, event) -> {
if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_POINTER_UP || event.getAction() == MotionEvent.ACTION_CANCEL) {
close();
}
return true;
});
windowLayoutParams = new WindowManager.LayoutParams();
windowLayoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
windowLayoutParams.format = PixelFormat.TRANSLUCENT;
windowLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
windowLayoutParams.gravity = Gravity.TOP;
windowLayoutParams.type = WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
if (Build.VERSION.SDK_INT >= 21) {
windowLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
} else {
windowLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
}
centerImage.setAspectFit(true);
centerImage.setInvalidateAll(true);
centerImage.setParentView(containerView);
}
public void setParentActivity(Activity activity) {
currentAccount = UserConfig.selectedAccount;
centerImage.setCurrentAccount(currentAccount);
centerImage.setLayerNum(7);
if (parentActivity == activity) {
return;
}
parentActivity = activity;
slideUpDrawable = parentActivity.getResources().getDrawable(R.drawable.preview_arrow);
windowView = new FrameLayout(activity);
windowView.setFocusable(true);
windowView.setFocusableInTouchMode(true);
if (Build.VERSION.SDK_INT >= 21) {
windowView.setFitsSystemWindows(true);
windowView.setOnApplyWindowInsetsListener((v, insets) -> {
lastInsets = insets;
return insets;
});
}
containerView = new FrameLayoutDrawer(activity);
containerView.setFocusable(false);
windowView.addView(containerView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT));
containerView.setOnTouchListener((v, event) -> {
if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_POINTER_UP || event.getAction() == MotionEvent.ACTION_CANCEL) {
close();
}
return true;
});
windowLayoutParams = new WindowManager.LayoutParams();
windowLayoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
windowLayoutParams.format = PixelFormat.TRANSLUCENT;
windowLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
windowLayoutParams.gravity = Gravity.TOP;
windowLayoutParams.type = WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
if (Build.VERSION.SDK_INT >= 21) {
windowLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
} else {
windowLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
}
centerImage.setAspectFit(true);
centerImage.setInvalidateAll(true);
centerImage.setParentView(containerView);
}