美文网首页
compose jetpack 横屏全屏 左右手模式切换

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

作者: 随心随弈走 | 来源:发表于2021-03-19 22:56 被阅读0次

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

     <!-- 从没有界面的activity中启动应用,使界面顺滑地切换到左手模式或者右手模式-->
            <activity
                android:name=".NoDisplayActivity"
                android:exported="true"
                android:label="@string/app_name"
                android:screenOrientation="user"    
                android:theme="@android:style/Theme.NoDisplay">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <!-- 左手横屏模式-->
            <activity
                android:name=".LeftHandModeActivity"
                android:launchMode="singleTop"
                android:screenOrientation="reverseLandscape"
                android:theme="@style/AppTheme.FullScreen">
            </activity>
            <!-- 右手横屏模式-->
            <activity
                android:name=".RightHandModeActivity"
                android:launchMode="singleTop"
                android:screenOrientation="landscape"
                android:theme="@style/AppTheme.FullScreen">
            </activity>
    

    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 横屏全屏 左右手模式切换

          本文链接:https://www.haomeiwen.com/subject/upibcltx.html