Jelajahi Sumber

首页基础环境搭建

bjb 2 minggu lalu
induk
melakukan
fd90157909

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 1 - 0
app/build.gradle.kts

@@ -48,6 +48,7 @@ dependencies {
     implementation(libs.androidx.compose.ui.graphics)
     implementation(libs.androidx.compose.ui.tooling.preview)
     implementation(libs.androidx.compose.material3)
+    implementation(libs.androidx.compose.navigation)
 
     // 携程相关包的导入
     implementation(libs.coroutines.core)

+ 1 - 1
app/src/main/AndroidManifest.xml

@@ -27,7 +27,7 @@
         </activity>
         <!--  主页面  -->
         <activity
-            android:name=".ui.pages.PageHome"
+            android:name=".ui.pages.home.PageHome"
             android:exported="true"
             android:launchMode="singleTask"
             android:theme="@style/Theme.Bozzys" />

+ 0 - 42
app/src/main/java/com/iscs/bozzys/ui/pages/PageHome.kt

@@ -1,42 +0,0 @@
-package com.iscs.bozzys.ui.pages
-
-import android.content.Context
-import android.content.Intent
-import androidx.compose.foundation.layout.PaddingValues
-import androidx.compose.foundation.layout.padding
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.ui.Modifier
-import androidx.lifecycle.viewmodel.compose.viewModel
-import com.iscs.bozzys.ui.base.PageBase
-import com.iscs.bozzys.ui.pages.vm.VMHome
-
-/**
- * 打开主页面
- */
-fun Context.openPageHome() {
-    startActivity(Intent(this, PageHome::class.java))
-}
-
-/**
- * App主页面
- */
-class PageHome : PageBase() {
-
-    @Composable
-    override fun GetViews(pv: PaddingValues) {
-        Home(pv)
-    }
-
-    @Composable
-    fun Home(pv: PaddingValues, vm: VMHome = viewModel()) {
-        val state = vm.state
-        Text(state.username, modifier = Modifier.padding(pv))
-
-        LaunchedEffect(Unit) {
-
-        }
-    }
-
-}

+ 1 - 0
app/src/main/java/com/iscs/bozzys/ui/pages/PageSplash.kt

@@ -10,6 +10,7 @@ import androidx.compose.runtime.LaunchedEffect
 import com.alibaba.sdk.android.push.CommonCallback
 import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory
 import com.iscs.bozzys.ui.base.PageBase
+import com.iscs.bozzys.ui.pages.home.openPageHome
 import kotlinx.coroutines.delay
 
 /**

+ 23 - 0
app/src/main/java/com/iscs/bozzys/ui/pages/home/HomeCompose.kt

@@ -0,0 +1,23 @@
+package com.iscs.bozzys.ui.pages.home
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.zIndex
+
+@Composable
+fun HomeCompose(pv: PaddingValues, zIndex: Float) {
+    Column(
+        modifier = Modifier
+            .fillMaxSize()
+            .zIndex(zIndex)
+            .background(Color(0xFFF8F8F8))
+    ) {
+        Text("首页")
+    }
+}

+ 28 - 0
app/src/main/java/com/iscs/bozzys/ui/pages/home/MyCompose.kt

@@ -0,0 +1,28 @@
+package com.iscs.bozzys.ui.pages.home
+
+import android.util.Log
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.zIndex
+
+@Composable
+fun MyCompose(pv: PaddingValues, zIndex: Float) {
+    Column(
+        modifier = Modifier
+            .fillMaxSize()
+            .zIndex(zIndex)
+            .background(Color(0xFFF8F8F8))
+    ) {
+        Text("我的")
+    }
+    LaunchedEffect("") {
+        Log.d("xiaoming", "我的")
+    }
+}

+ 144 - 0
app/src/main/java/com/iscs/bozzys/ui/pages/home/PageHome.kt

@@ -0,0 +1,144 @@
+package com.iscs.bozzys.ui.pages.home
+
+import android.content.Context
+import android.content.Intent
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.defaultMinSize
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.offset
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Home
+import androidx.compose.material.icons.filled.Person
+import androidx.compose.material3.Icon
+import androidx.compose.material3.Scaffold
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.IntState
+import androidx.compose.runtime.mutableIntStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.lifecycle.viewmodel.compose.viewModel
+import com.iscs.bozzys.ui.base.PageBase
+import com.iscs.bozzys.ui.pages.vm.VMHome
+
+/**
+ * 打开主页面
+ */
+fun Context.openPageHome() {
+    startActivity(Intent(this, PageHome::class.java))
+}
+
+/**
+ * App主页面
+ */
+class PageHome : PageBase() {
+
+    @Composable
+    override fun GetViews(pv: PaddingValues) {
+        Home(pv)
+    }
+
+    @Composable
+    fun Home(pv: PaddingValues, vm: VMHome = viewModel()) {
+        val navIndex = remember { mutableIntStateOf(0) }
+        Scaffold(
+            modifier = Modifier.fillMaxSize(),
+            bottomBar = { CreateNavigationBar(pv, Color(0xFFFFFFFF), navIndex, onClick = { navIndex.intValue = it }) }
+        ) { ip ->
+            Box(
+                modifier = Modifier
+                    .padding(PaddingValues(bottom = ip.calculateBottomPadding() - pv.calculateBottomPadding()))
+                    .fillMaxSize()
+            ) {
+                HomeCompose(pv, if (navIndex.intValue == 0) 99f else 0f)
+                MyCompose(pv, if (navIndex.intValue == 1) 99f else 0f)
+            }
+        }
+    }
+
+    /**
+     * 构建底部导航栏
+     */
+    @Composable
+    fun CreateNavigationBar(pv: PaddingValues, bgColor: Color, navIndex: IntState, onClick: (value: Int) -> Unit) {
+        val navs = listOf(
+            NavBarItem("首页", Icons.Default.Home, Color(0xFF1779FF), Color(0xFF191919)),
+            NavBarItem("我的", Icons.Default.Person, Color(0xFF1779FF), Color(0xFF191919))
+        )
+        Row(
+            modifier = Modifier
+                .fillMaxWidth()
+                .background(bgColor)
+                .padding(PaddingValues(bottom = pv.calculateBottomPadding()))
+        ) {
+            navs.forEachIndexed { index, nav ->
+                Box(
+                    modifier = Modifier
+                        .weight(1.0f)
+                        .height(44.dp)
+                        .clickable(interactionSource = remember { MutableInteractionSource() }, indication = null, onClick = { onClick(index) }),
+                ) {
+                    Column(
+                        verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally,
+                        modifier = Modifier.align(Alignment.Center)
+                    ) {
+                        Icon(
+                            nav.icon, contentDescription = null,
+                            modifier = Modifier
+                                .size(26.dp),
+                            tint = if (navIndex.intValue == index) nav.selectedColor else nav.unselectedColor
+                        )
+                        Text(
+                            nav.title,
+                            fontSize = 10.sp,
+                            lineHeight = 10.sp,
+                            color = if (navIndex.intValue == index) nav.selectedColor else nav.unselectedColor
+                        )
+                    }
+                    Text(
+                        "1", color = Color.White, modifier = Modifier
+                            .offset(x = 10.dp)
+                            .defaultMinSize(14.dp, 14.dp)
+                            .clip(RoundedCornerShape(14.dp))
+                            .background(Color.Red)
+                            .align(Alignment.TopCenter)
+                            .padding(top = 1.dp),
+                        textAlign = TextAlign.Center,
+                        fontSize = 10.sp,
+                        lineHeight = 10.sp
+                    )
+                }
+            }
+        }
+    }
+
+}
+
+/**
+ * 底部导航栏对象
+ *
+ * @param title             导航栏名称
+ * @param icon              图标
+ * @param selectedColor     选中的颜色
+ * @param unselectedColor   未选中的颜色
+ */
+data class NavBarItem(val title: String, val icon: ImageVector, val selectedColor: Color, val unselectedColor: Color)

+ 1 - 0
gradle/libs.versions.toml

@@ -26,6 +26,7 @@ androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "u
 androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
 androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
 androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }
+androidx-compose-navigation = { group = "androidx.navigation", name = "navigation-compose", version = "2.8.0" }
 
 # 网络请求
 retrofit-core = { group = "com.squareup.retrofit2", name = "retrofit", version = "3.0.0" }