ソースを参照

added lazy vertical grid

sirekanian 3 年 前
コミット
14b62c879e

+ 6 - 1
app/src/main/java/com/sirekanian/spacetime/MainActivity.kt

@@ -12,6 +12,8 @@ import androidx.compose.ui.Modifier
 import androidx.core.view.WindowCompat
 import com.google.accompanist.pager.ExperimentalPagerApi
 import com.google.accompanist.pager.HorizontalPager
+import com.sirekanian.spacetime.ui.GalleryPageContent
+import com.sirekanian.spacetime.ui.ImagePageContent
 import com.sirekanian.spacetime.ui.theme.SpacetimeTheme
 
 class MainActivity : ComponentActivity() {
@@ -32,7 +34,10 @@ class MainActivity : ComponentActivity() {
                         count = pages.size,
                         modifier = Modifier.systemBarsPadding(),
                     ) { index ->
-                        PageContent(state, pages[index], index)
+                        when (val page = pages[index]) {
+                            is ImagePage -> ImagePageContent(state, page, index)
+                            GalleryPage -> GalleryPageContent(state)
+                        }
                     }
                 }
             }

+ 0 - 42
app/src/main/java/com/sirekanian/spacetime/PageContent.kt

@@ -1,42 +0,0 @@
-package com.sirekanian.spacetime
-
-import androidx.compose.foundation.layout.*
-import androidx.compose.material.Button
-import androidx.compose.material.Text
-import androidx.compose.material.TextField
-import androidx.compose.runtime.*
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.unit.dp
-
-@Composable
-fun PageContent(state: MainState, page: Page, index: Int) {
-    Column(
-        modifier = Modifier
-            .fillMaxSize()
-            .padding(16.dp),
-        verticalArrangement = Arrangement.spacedBy(16.dp)
-    ) {
-        when (page) {
-            is ImagePage -> {
-                Text(text = "page ${page.name}")
-                Button(onClick = { state.removePage(index) }) {
-                    Text("Delete")
-                }
-            }
-            GalleryPage -> {
-                var name by remember { mutableStateOf("") }
-                TextField(
-                    value = name,
-                    onValueChange = { name = it },
-                    modifier = Modifier.fillMaxWidth()
-                )
-                Button(
-                    onClick = { state.addPage(name) },
-                    enabled = name.isNotEmpty()
-                ) {
-                    Text("Add")
-                }
-            }
-        }
-    }
-}

+ 34 - 0
app/src/main/java/com/sirekanian/spacetime/ui/GalleryPageContent.kt

@@ -0,0 +1,34 @@
+package com.sirekanian.spacetime.ui
+
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.aspectRatio
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.lazy.grid.GridCells
+import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import com.sirekanian.spacetime.MainState
+
+@Composable
+fun GalleryPageContent(state: MainState) {
+    LazyVerticalGrid(
+        columns = GridCells.Adaptive(100.dp),
+        modifier = Modifier.fillMaxSize(),
+    ) {
+        items(100) {
+            val name = "item${it + 1}"
+            Box(
+                modifier = Modifier
+                    .aspectRatio(1f)
+                    .clickable { state.addPage(name) },
+                contentAlignment = Alignment.Center,
+            ) {
+                Text(text = name)
+            }
+        }
+    }
+}

+ 28 - 0
app/src/main/java/com/sirekanian/spacetime/ui/ImagePageContent.kt

@@ -0,0 +1,28 @@
+package com.sirekanian.spacetime.ui
+
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material.Button
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+import com.sirekanian.spacetime.ImagePage
+import com.sirekanian.spacetime.MainState
+
+@Composable
+fun ImagePageContent(state: MainState, page: ImagePage, index: Int) {
+    Column(
+        modifier = Modifier
+            .fillMaxSize()
+            .padding(16.dp),
+        verticalArrangement = Arrangement.spacedBy(16.dp),
+    ) {
+        Text(text = page.name)
+        Button(onClick = { state.removePage(index) }) {
+            Text("Delete")
+        }
+    }
+}