How to create a floating touchable activity that still allows to touch native controls outside of its borders?

后端 未结 2 682
生来不讨喜
生来不讨喜 2020-12-30 14:32

What I am trying to achieve is best explained by the scheme I made with mspaint:

I have tried to set FLAG_NOT_TOUCH_MODAL which by the descript

相关标签:
2条回答
  • 2020-12-30 15:04

    Set a Dialog theme on the Activity in your manifest. For example:

    android:theme="@android:style/Theme.Dialog"
    

    Then set the following Window parameters in onCreate():

    public void setWindowParams() {
        WindowManager.LayoutParams wlp = getWindow().getAttributes();
        wlp.dimAmount = 0;            
        wlp.flags = WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS |
                    WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
        getWindow().setAttributes(wlp);     
    }
    
    0 讨论(0)
  • 2020-12-30 15:07

    You can use activity with special theme in your AndroidManifest file:

    <style name="Theme.Transparent">
            <item name="windowActionBar">false</item>
            <item name="windowNoTitle">true</item>
            <item name="android:windowIsTranslucent">true</item>
            <item name="android:windowBackground">@android:color/transparent</item>
            <item name="android:colorBackgroundCacheHint">@null</item>
            <item name="android:windowContentOverlay">@null</item>
            <!--<item name="android:backgroundDimEnabled">false</item>--> // show/hide background 
            <item name="android:windowIsFloating">true</item>
    </style>
    

    And also don't forget to set mach_parent attribute in Activity like:

    override fun onStart() {
            super.onStart()
            window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)
        }
    
    0 讨论(0)
提交回复
热议问题