compose jetpack 横屏全屏 左右手模式切换


这是正在做的双色球走势图横屏应用,有新进展会在这里更新。目的是想知道,完成心中所想,需要多大的努力。这篇文章所实现的功能是,单手握持手机使用这个应用时,无伦是左手还是右手握持,都有很好的握持感。经过一番努力,基本完成当初的设想。
首先要实现横屏全屏,这个在这篇文章找到了符合要求的代码设置
Android 沉浸式状态栏与隐藏导航栏

    public static void NavigationBarStatusBar(Activity activity,boolean hasFocus){
        if (hasFocus && Build.VERSION.SDK_INT >= 19) {
            View decorView = activity.getWindow().getDecorView();
            decorView.setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
        }
    }

将这个方法,在onCreate里放一行,在onResume也放一行基本就满足要求了

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        NavigationBarStatusBar(this)
        setContent {
            Canvas()
        }
    }
    override fun onResume() {
        NavigationBarStatusBar(this)
        super.onResume()
    }
    private fun NavigationBarStatusBar(activity: Activity) {
        val decorView = activity.window.decorView
        decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_FULLSCREEN
                or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)
    }
}

难点在于左右手模式顺滑地切换,有关于左右手模式,网上能搜到的资料很少,我费了很大的劲也是一无所获。就在我要放弃这种设计模式时,突然一激灵,想到用没有界面的activity来作为MainActivity,事情一下子就豁然开朗了。(系统默认有"@android:style/Theme.NoDisplay"这个主题)
AndroidManifest.xml文件

 
        
            
                
                
            
        
        
        
        
        
        
        

NoDisplayActivity文件

class NoDisplayActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        //用SharedPreferences保存左右手模式的值
        val sp = getSharedPreferences("scope", 0)
        when (sp.getInt("count", 0)) {
            //右手模式
            0 ->{startActivity(Intent(this, RightHandModeActivity::class.java))}
            //左手模式
            1 ->{startActivity(Intent(this, LeftHandModeActivity::class.java))}
        }
        finish()
    }
}

LeftHandModeActivity 文件,基本是将MainActivity照搬过来,然后添加一些界面代码。


class LeftHandModeActivity : ComponentActivity() {
    @ExperimentalFoundationApi
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        NavigationBarStatusBar(this)
        
        //有待进一步去完善
         val sp = getSharedPreferences("scope", 0)
         val editor = sp.edit()
         editor.putInt("count", 0).apply()
        setContent {
            LottoryTheme {
                // A surface container using the 'background' color from the theme
                Surface(color = MaterialTheme.colors.background) {
                    Scaffold(
                        content = {
                            LeftModeScreen()
                        }
                    )
                }
            }
        }
    }

    override fun onResume() {
        NavigationBarStatusBar(this)
        super.onResume()
    }

    //隐藏导航栏,状态栏
    private fun NavigationBarStatusBar(activity: Activity) {
        val decorView = activity.window.decorView
        decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_FULLSCREEN
                or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)
    }

}

RightHandModeActivity 文件和LeftHandModeActivity 文件差不多,就不列出来了。界面代码使用上篇文章的画板代码
compose jetpack canvas简单入门

@Composable
fun LeftModeScreen() {
    Row(modifier = Modifier.fillMaxSize()) {
        //这里是一些行列组合代码
        MenuColumn()
        Column(
            modifier = Modifier
                .background(Color(34,43,44,50))
                .wrapContentWidth()
        ) {
            //这里是上篇文章的代码
            LeftModeCanvas()
        }
    }
}

LeftModeCanvas()是上篇文章的代码, MenuColumn()是一些简单行列组合代码,我所写的代码还有很多问题,就不贴出来了。
好了,本篇文章就到这里结束了。

你可能感兴趣的:(compose jetpack 横屏全屏 左右手模式切换)