You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android竖屏应用平板横屏时左右黑区响应点击问题求助

解决平板固定竖屏后黑边区域响应点击的问题

问题原因

平板横屏时,系统仅将竖屏布局居中显示在物理屏幕中间,保留左右黑边,但触摸事件的计算仍基于设备全屏尺寸,导致黑边区域对应布局中超出可视范围的部分,点击时会触发对应位置的交互。

解决方案

方案1:修正Manifest配置(优先尝试)

将屏幕方向配置从Application层级移至Activity层级,并添加resizeableActivity="false"限制窗口适配,避免布局延伸至黑边区域:

<activity
    android:name=".MainActivity"
    android:screenOrientation="portrait"
    android:configChanges="orientation|screenSize"
    android:resizeableActivity="false">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

方案2:拦截黑边区域的触摸事件

在MainActivity中给根布局添加触摸监听,判断点击位置是否在可视竖屏范围内,超出则拦截事件:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val rootView = findViewById<View>(android.R.id.content)
    rootView.setOnTouchListener { _, event ->
        val displayMetrics = resources.displayMetrics
        val portraitWidth = min(displayMetrics.widthPixels, displayMetrics.heightPixels)
        val startX = (displayMetrics.widthPixels - portraitWidth) / 2f
        val endX = startX + portraitWidth

        // 点击位置超出竖屏可视区域则拦截
        event.x < startX || event.x > endX
    }
}

方案3:调整窗口显示区域

通过WindowManager限制窗口宽度为竖屏尺寸并居中,让布局仅在可视范围内渲染:

override fun onWindowFocusChanged(hasFocus: Boolean) {
    super.onWindowFocusChanged(hasFocus)
    if (hasFocus) {
        val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
        val displayMetrics = DisplayMetrics()
        windowManager.defaultDisplay.getMetrics(displayMetrics)
        val portraitWidth = min(displayMetrics.widthPixels, displayMetrics.heightPixels)
        
        val decorView = window.decorView
        val layoutParams = decorView.layoutParams as WindowManager.LayoutParams
        layoutParams.width = portraitWidth
        layoutParams.gravity = Gravity.CENTER
        windowManager.updateViewLayout(decorView, layoutParams)
    }
}

内容的提问来源于stack exchange,提问作者nomemt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:52:41