मेरे मामले में जहां मैं कुछ इस तरह से होना चाहता था:
मुझे @Mdlc द्वारा सुझाई गई उसी चीज़ का अनुसरण करना था, लेकिन शायद थोड़ा सरल हो ( केवल लक्ष्यीकरण = = 21):
//kotlin
val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
val realSize = Point()
windowManager.defaultDisplay.getRealSize(realSize);
val usableRect = Rect()
windowManager.defaultDisplay.getRectSize(usableRect)
Toast.makeText(this, "Usable Screen: " + usableRect + " real:"+realSize, Toast.LENGTH_LONG).show()
window.decorView.setPadding(usableRect.left, usableRect.top, realSize.x - usableRect.right, realSize.y - usableRect.bottom)
यह परिदृश्य पर भी काम करता है:
संपादित करें
उपरोक्त समाधान मल्टी-विंडो मोड में सही तरीके से काम नहीं करता है जहां उपयोग योग्य आयत सिर्फ नेविगेशन बार के कारण छोटा नहीं है, बल्कि कस्टम विंडो आकार के कारण भी है। एक बात जो मैंने देखी, वह यह है कि मल्टी-विंडो में नेविगेशन बार ऐप पर नहीं मंडरा रहा है, यहां तक कि डेकोरव्यू पैडिंग में कोई बदलाव नहीं होने के कारण हमारे पास सही व्यवहार है:
नेविगेशन बार इन परिदृश्यों में ऐप के निचले भाग में कैसे घूम रहा है, इस पर ध्यान दें। सौभाग्य से, यह तय करना आसान है। हम जाँच सकते हैं कि ऐप मल्टी विंडो है या नहीं। नीचे दिए गए कोड में टूलबार की स्थिति की गणना करने और समायोजित करने का हिस्सा भी शामिल है (पूर्ण समाधान: https://stackoverflow.com/a/14213035/477790 )
// kotlin
// Let the window flow into where window decorations are
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN)
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
// calculate where the bottom of the page should end up, considering the navigation bar (back buttons, ...)
val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
val realSize = Point()
windowManager.defaultDisplay.getRealSize(realSize);
val usableRect = Rect()
windowManager.defaultDisplay.getRectSize(usableRect)
Toast.makeText(this, "Usable Screen: " + usableRect + " real:" + realSize, Toast.LENGTH_LONG).show()
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N || !isInMultiWindowMode) {
window.decorView.setPadding(usableRect.left, usableRect.top, realSize.x - usableRect.right, realSize.y - usableRect.bottom)
// move toolbar/appbar further down to where it should be and not to overlap with status bar
val layoutParams = ConstraintLayout.LayoutParams(appBarLayout.layoutParams as ConstraintLayout.LayoutParams)
layoutParams.topMargin = getSystemSize(Constants.statusBarHeightKey)
appBarLayout.layoutParams = layoutParams
}
सैमसंग पॉपअप मोड पर परिणाम: