Skip to content

Commit 53bb791

Browse files
add onGloballyPositioned Modifier sample
1 parent b50b606 commit 53bb791

File tree

5 files changed

+87
-6
lines changed

5 files changed

+87
-6
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import com.smarttoolfactory.tutorial1_1basics.ui.components.TutorialText2
2525
import kotlin.random.Random
2626

2727
@Composable
28-
fun Tutorial3_1Screen() {
28+
fun Tutorial3_1Screen1() {
2929
TutorialContent()
3030
}
3131

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.smarttoolfactory.tutorial1_1basics.chapter3_layout
2+
3+
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.border
5+
import androidx.compose.foundation.layout.*
6+
import androidx.compose.material.Text
7+
import androidx.compose.runtime.*
8+
import androidx.compose.ui.Modifier
9+
import androidx.compose.ui.geometry.Offset
10+
import androidx.compose.ui.graphics.Color
11+
import androidx.compose.ui.layout.onGloballyPositioned
12+
import androidx.compose.ui.layout.positionInParent
13+
import androidx.compose.ui.layout.positionInRoot
14+
import androidx.compose.ui.layout.positionInWindow
15+
import androidx.compose.ui.unit.dp
16+
import com.smarttoolfactory.tutorial1_1basics.ui.components.StyleableTutorialText
17+
18+
@Composable
19+
fun Tutorial3_1Screen2() {
20+
TutorialContent()
21+
}
22+
23+
@Composable
24+
private fun TutorialContent() {
25+
Column(modifier =Modifier.fillMaxSize()) {
26+
StyleableTutorialText(
27+
text = "**onGloballyPositioned** Modifier returns position of the Composable " +
28+
"inside parent, root or window. Window adds **StatusBar** height to root.",
29+
bullets = false)
30+
Box(modifier = Modifier
31+
.fillMaxWidth()
32+
.height(100.dp)
33+
.background(Color.Red))
34+
Column(modifier = Modifier.fillMaxWidth()) {
35+
Box(modifier = Modifier
36+
.fillMaxWidth()
37+
.height(200.dp)
38+
.background(Color.Yellow))
39+
MyComposable()
40+
}
41+
}
42+
}
43+
44+
@Composable
45+
private fun MyComposable() {
46+
47+
48+
var text by remember { mutableStateOf("") }
49+
Column(modifier = Modifier
50+
.fillMaxWidth()
51+
.height(300.dp)
52+
.border(2.dp, Color.Red)
53+
.onGloballyPositioned {
54+
val positionInParent: Offset = it.positionInParent()
55+
val positionInRoot: Offset = it.positionInRoot()
56+
val positionInWindow: Offset = it.positionInWindow()
57+
text =
58+
"positionInParent: $positionInParent\n" +
59+
"positionInRoot: $positionInRoot\n" +
60+
"positionInWindow: $positionInWindow"
61+
}
62+
) {
63+
Text(text = text)
64+
}
65+
}

Tutorial1-1Basics/src/main/java/com/smarttoolfactory/tutorial1_1basics/tutorial_list/TutorialList.kt

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -483,12 +483,12 @@ fun createComponentTutorialList(onBack: () -> Unit): List<TutorialSectionModel>
483483
@Composable
484484
fun createLayoutTutorialList(): List<TutorialSectionModel> {
485485

486-
val tutorial3_1 = TutorialSectionModel(
487-
title = stringResource(R.string.title3_1),
486+
val tutorial3_1_1 = TutorialSectionModel(
487+
title = stringResource(R.string.title3_1_1),
488488
description = "Create custom modifiers using layout, Measurable, Constraint, Placeable," +
489489
" and LayoutModifier.",
490490
action = {
491-
Tutorial3_1Screen()
491+
Tutorial3_1Screen1()
492492
},
493493
tags = listOf(
494494
TAG_COMPOSE,
@@ -501,6 +501,20 @@ fun createLayoutTutorialList(): List<TutorialSectionModel> {
501501
tagColor = LayoutListColor
502502
)
503503

504+
val tutorial3_1_2 = TutorialSectionModel(
505+
title = stringResource(R.string.title3_1_2),
506+
description = "Use Modifier.onGloballyPositioned to get position of a Composable" +
507+
"in parent, root or window.",
508+
action = {
509+
Tutorial3_1Screen2()
510+
},
511+
tags = listOf(
512+
TAG_COMPOSE,
513+
TAG_COMPOSE_MODIFIER
514+
),
515+
tagColor = LayoutListColor
516+
)
517+
504518
val tutorial3_2_1 = TutorialSectionModel(
505519
title = stringResource(R.string.title3_2_1),
506520
description = "Create custom layout using using layout, Measurable, Constraint, Placeable.",
@@ -643,7 +657,8 @@ fun createLayoutTutorialList(): List<TutorialSectionModel> {
643657
)
644658

645659
return listOf(
646-
tutorial3_1,
660+
tutorial3_1_1,
661+
tutorial3_1_2,
647662
tutorial3_2_1,
648663
tutorial3_2_2,
649664
tutorial3_2_3,

Tutorial1-1Basics/src/main/res/values/strings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
<string name="title2_11">2-11 Snack, Progress, Select</string>
2929
<string name="title2_12">2-12 Dialog</string>
3030
<string name="title2_13">2-13 SwipeToDismiss</string>
31-
<string name="title3_1">3-1 Custom Modifier</string>
31+
<string name="title3_1_1">3-1-1 Custom Modifier</string>
32+
<string name="title3_1_2">3-1-2 onGloballyPositioned</string>
3233
<string name="title3_2_1">3-2-1 Custom Layout</string>
3334
<string name="title_3_3_1">3-3-1 Scope and ParentDataModifier</string>
3435
<string name="title_3_4">3-4 BoxWithConstraints</string>

0 commit comments

Comments
 (0)