Skip to content

Commit 89c095f

Browse files
committed
Feat: 루틴탈퇴 화면 스크롤 영역 설정
1 parent 9a1bfab commit 89c095f

File tree

4 files changed

+40
-38
lines changed

4 files changed

+40
-38
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
tools:targetApi="31">
1818
<activity
1919
android:name=".MainActivity"
20+
android:windowSoftInputMode="adjustResize"
2021
android:exported="true"
2122
android:theme="@style/Theme.Bitnagil">
2223
<intent-filter>

app/src/main/java/com/threegap/bitnagil/MainScreen.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.threegap.bitnagil
22

33
import androidx.compose.foundation.layout.WindowInsets
4-
import androidx.compose.foundation.layout.WindowInsetsSides
4+
import androidx.compose.foundation.layout.exclude
55
import androidx.compose.foundation.layout.fillMaxSize
6-
import androidx.compose.foundation.layout.only
6+
import androidx.compose.foundation.layout.ime
7+
import androidx.compose.foundation.layout.navigationBars
78
import androidx.compose.foundation.layout.padding
8-
import androidx.compose.foundation.layout.systemBars
99
import androidx.compose.material3.Scaffold
1010
import androidx.compose.runtime.Composable
1111
import androidx.compose.ui.Modifier
@@ -18,7 +18,7 @@ fun MainScreen(
1818
) {
1919
Scaffold(
2020
modifier = modifier.fillMaxSize(),
21-
contentWindowInsets = WindowInsets.systemBars.only(WindowInsetsSides.Bottom),
21+
contentWindowInsets = WindowInsets.navigationBars.exclude(WindowInsets.ime),
2222
containerColor = BitnagilTheme.colors.white,
2323
) { innerPadding ->
2424
MainNavHost(

presentation/src/main/java/com/threegap/bitnagil/presentation/withdrawal/WithdrawalScreen.kt

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,28 @@ package com.threegap.bitnagil.presentation.withdrawal
22

33
import androidx.compose.foundation.background
44
import androidx.compose.foundation.layout.Arrangement
5-
import androidx.compose.foundation.layout.Box
65
import androidx.compose.foundation.layout.Column
76
import androidx.compose.foundation.layout.Row
87
import androidx.compose.foundation.layout.Spacer
8+
import androidx.compose.foundation.layout.WindowInsets
99
import androidx.compose.foundation.layout.fillMaxSize
1010
import androidx.compose.foundation.layout.fillMaxWidth
1111
import androidx.compose.foundation.layout.height
12+
import androidx.compose.foundation.layout.ime
1213
import androidx.compose.foundation.layout.padding
1314
import androidx.compose.foundation.layout.statusBarsPadding
15+
import androidx.compose.foundation.layout.windowInsetsPadding
16+
import androidx.compose.foundation.rememberScrollState
1417
import androidx.compose.foundation.shape.RoundedCornerShape
1518
import androidx.compose.foundation.text.BasicTextField
19+
import androidx.compose.foundation.verticalScroll
1620
import androidx.compose.material3.Text
1721
import androidx.compose.runtime.Composable
1822
import androidx.compose.runtime.getValue
1923
import androidx.compose.runtime.remember
2024
import androidx.compose.ui.Alignment
2125
import androidx.compose.ui.Modifier
26+
import androidx.compose.ui.draw.alpha
2227
import androidx.compose.ui.focus.FocusRequester
2328
import androidx.compose.ui.focus.focusRequester
2429
import androidx.compose.ui.focus.onFocusChanged
@@ -81,16 +86,17 @@ private fun WithdrawalScreen(
8186
onCustomReasonChanged: (String) -> Unit,
8287
onBackClick: () -> Unit,
8388
onWithdrawalClick: () -> Unit,
84-
modifier: Modifier = Modifier,
8589
) {
8690
val focusManager = LocalFocusManager.current
8791
val focusRequester = remember { FocusRequester() }
92+
val scrollState = rememberScrollState()
8893

8994
Column(
90-
modifier = modifier
95+
modifier = Modifier
9196
.fillMaxSize()
9297
.background(BitnagilTheme.colors.white)
93-
.statusBarsPadding(),
98+
.statusBarsPadding()
99+
.windowInsetsPadding(WindowInsets.ime),
94100
) {
95101
BitnagilTopBar(
96102
title = "탈퇴하기",
@@ -99,7 +105,10 @@ private fun WithdrawalScreen(
99105
)
100106

101107
Column(
102-
modifier = Modifier.padding(horizontal = 16.dp),
108+
modifier = Modifier
109+
.padding(horizontal = 16.dp)
110+
.weight(1f)
111+
.verticalScroll(scrollState),
103112
) {
104113
Spacer(modifier = Modifier.height(46.dp))
105114

@@ -136,13 +145,12 @@ private fun WithdrawalScreen(
136145
style = BitnagilTheme.typography.body2Medium,
137146
)
138147
}
139-
}
140148

141-
if (uiState.isTermsChecked) {
142149
Spacer(modifier = Modifier.height(48.dp))
143150

144151
Column(
145-
modifier = Modifier.padding(horizontal = 16.dp),
152+
modifier = Modifier
153+
.alpha(if (uiState.isTermsChecked) 1f else 0f),
146154
) {
147155
Text(
148156
text = "탈퇴 사유를 알려주실 수 있나요?",
@@ -172,46 +180,43 @@ private fun WithdrawalScreen(
172180
color = BitnagilTheme.colors.coolGray10,
173181
),
174182
modifier = Modifier
183+
.fillMaxWidth()
184+
.background(
185+
color = BitnagilTheme.colors.coolGray99,
186+
shape = RoundedCornerShape(12.dp),
187+
)
188+
.height(112.dp)
189+
.padding(vertical = 14.dp, horizontal = 20.dp)
175190
.focusRequester(focusRequester)
176191
.onFocusChanged { focusState ->
177192
if (focusState.isFocused) {
178193
onReasonSelect(null)
179194
}
180195
},
181196
decorationBox = { innerTextField ->
182-
Box(
183-
modifier = Modifier
184-
.fillMaxWidth()
185-
.background(
186-
color = BitnagilTheme.colors.coolGray99,
187-
shape = RoundedCornerShape(12.dp),
188-
)
189-
.height(112.dp)
190-
.padding(vertical = 14.dp, horizontal = 20.dp),
191-
) {
192-
if (uiState.customReasonText.isEmpty()) {
193-
Text(
194-
text = "기타사항(직접 입력)",
195-
color = BitnagilTheme.colors.coolGray80,
196-
style = BitnagilTheme.typography.subtitle1Medium,
197-
)
198-
}
199-
innerTextField()
197+
if (uiState.customReasonText.isEmpty()) {
198+
Text(
199+
text = "기타사항(직접 입력)",
200+
color = BitnagilTheme.colors.coolGray80,
201+
style = BitnagilTheme.typography.subtitle1Medium,
202+
)
200203
}
204+
innerTextField()
201205
},
202206
)
203207
}
204-
}
205208

206-
Spacer(modifier = Modifier.weight(1f))
209+
Spacer(modifier = Modifier.height(54.dp))
210+
}
207211

208212
BitnagilTextButton(
209213
text = "탈퇴하기",
210214
onClick = onWithdrawalClick,
211215
enabled = uiState.isWithdrawalEnabled,
212216
modifier = Modifier
213217
.fillMaxWidth()
214-
.padding(horizontal = 16.dp, vertical = 14.dp),
218+
.alpha(if (uiState.isTermsChecked) 1f else 0f)
219+
.padding(vertical = 14.dp, horizontal = 16.dp),
215220
)
216221
}
217222
}

presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/WriteRoutineScreen.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,10 @@ import androidx.compose.foundation.layout.Column
55
import androidx.compose.foundation.layout.Row
66
import androidx.compose.foundation.layout.Spacer
77
import androidx.compose.foundation.layout.WindowInsets
8-
import androidx.compose.foundation.layout.exclude
98
import androidx.compose.foundation.layout.fillMaxSize
109
import androidx.compose.foundation.layout.fillMaxWidth
1110
import androidx.compose.foundation.layout.height
1211
import androidx.compose.foundation.layout.ime
13-
import androidx.compose.foundation.layout.navigationBars
1412
import androidx.compose.foundation.layout.padding
1513
import androidx.compose.foundation.layout.statusBarsPadding
1614
import androidx.compose.foundation.layout.width
@@ -107,9 +105,7 @@ private fun WriteRoutineScreen(
107105
.fillMaxSize()
108106
.background(color = BitnagilTheme.colors.white)
109107
.statusBarsPadding()
110-
.windowInsetsPadding(
111-
WindowInsets.ime.exclude(WindowInsets.navigationBars),
112-
),
108+
.windowInsetsPadding(WindowInsets.ime),
113109
) {
114110
BitnagilTopBar(
115111
title = if (state.writeRoutineType == WriteRoutineType.ADD) "루틴 등록" else "루틴 수정",

0 commit comments

Comments
 (0)