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