Skip to content

Commit 9a71bf9

Browse files
committed
refactor: appearance improvement of DropDownMenu
1 parent f3c389f commit 9a71bf9

File tree

2 files changed

+14
-17
lines changed

2 files changed

+14
-17
lines changed

you-have-mail-android/app/src/main/java/dev/lbeernaert/youhavemail/screens/Settings.kt

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package dev.lbeernaert.youhavemail.screens
22

3-
import androidx.compose.foundation.background
43
import androidx.compose.foundation.clickable
54
import androidx.compose.foundation.layout.Box
65
import androidx.compose.foundation.layout.Column
76
import androidx.compose.foundation.layout.Spacer
87
import androidx.compose.foundation.layout.fillMaxSize
98
import androidx.compose.foundation.layout.fillMaxWidth
109
import androidx.compose.foundation.layout.padding
10+
import androidx.compose.foundation.layout.width
1111
import androidx.compose.foundation.layout.wrapContentSize
12-
import androidx.compose.foundation.layout.wrapContentWidth
1312
import androidx.compose.material.Divider
1413
import androidx.compose.material.DropdownMenu
1514
import androidx.compose.material.DropdownMenuItem
@@ -18,7 +17,6 @@ import androidx.compose.material.ExposedDropdownMenuDefaults
1817
import androidx.compose.material.MaterialTheme
1918
import androidx.compose.material.Text
2019
import androidx.compose.material.TextField
21-
import androidx.compose.material.TextFieldDefaults
2220
import androidx.compose.runtime.Composable
2321
import androidx.compose.runtime.collectAsState
2422
import androidx.compose.runtime.getValue
@@ -28,12 +26,13 @@ import androidx.compose.runtime.remember
2826
import androidx.compose.runtime.setValue
2927
import androidx.compose.ui.Alignment
3028
import androidx.compose.ui.Modifier
31-
import androidx.compose.ui.graphics.Color
32-
import androidx.compose.ui.res.colorResource
29+
import androidx.compose.ui.geometry.Size
30+
import androidx.compose.ui.layout.onGloballyPositioned
31+
import androidx.compose.ui.platform.LocalDensity
3332
import androidx.compose.ui.res.stringResource
34-
import androidx.compose.ui.text.TextStyle
3533
import androidx.compose.ui.text.style.TextAlign
3634
import androidx.compose.ui.unit.dp
35+
import androidx.compose.ui.unit.toSize
3736
import dev.lbeernaert.youhavemail.R
3837
import dev.lbeernaert.youhavemail.app.State
3938
import dev.lbeernaert.youhavemail.components.ActionButton
@@ -65,6 +64,8 @@ fun Settings(
6564
listOf(30UL, 60UL, 120UL, 180UL, 300UL, 600UL, 900UL, 1200UL, 1800UL, 3600UL)
6665
var expanded by remember { mutableStateOf(false) }
6766
var selectedIndex by remember { mutableIntStateOf(0) }
67+
// textFieldSize is used to assign to DropDownMenu the same width as TextField
68+
var textFieldSize by remember { mutableStateOf(Size.Zero)}
6869

6970
val onPollIntervalModified: () -> Unit = {
7071
runTask(updatingPollIntervalLabel) {
@@ -87,9 +88,11 @@ fun Settings(
8788
TextField(
8889
modifier = Modifier
8990
.fillMaxWidth()
90-
.clickable { expanded = !expanded },
91+
.clickable { expanded = !expanded }
92+
.onGloballyPositioned { coordinates ->
93+
textFieldSize = coordinates.size.toSize()
94+
},
9195
value = secondsToText(pollIntervalValue),
92-
textStyle = TextStyle(color = Color.Black),
9396
readOnly = true,
9497
enabled = false,
9598
singleLine = true,
@@ -99,7 +102,7 @@ fun Settings(
99102
expanded = expanded,
100103
onIconClick = { expanded = !expanded })
101104
},
102-
colors = TextFieldDefaults.textFieldColors(backgroundColor = colorResource(id = R.color.gray_dropdownmenu)),
105+
colors = ExposedDropdownMenuDefaults.textFieldColors(),
103106
)
104107

105108
Spacer(modifier = Modifier.padding(5.dp))
@@ -117,27 +120,22 @@ fun Settings(
117120

118121
Box(
119122
modifier = Modifier
120-
.padding(20.dp)
121123
.fillMaxSize()
122124
.wrapContentSize(Alignment.TopStart)
123125
) {
124126
DropdownMenu(
125127
expanded = expanded,
126128
onDismissRequest = { expanded = false },
127129
modifier = Modifier
128-
.background(colorResource(id = R.color.gray_dropdownmenu))
129-
.wrapContentWidth()
130+
.width(with(LocalDensity.current) { textFieldSize.width.toDp() })
130131
) {
131132
timeIntervals.forEachIndexed { index, seconds ->
132133
DropdownMenuItem(onClick = {
133134
expanded = false
134135
selectedIndex = index
135136
onPollIntervalModified()
136137
}) {
137-
Text(
138-
text = secondsToText(seconds),
139-
color = Color.Black
140-
)
138+
Text(text = secondsToText(seconds))
141139
}
142140
}
143141
}

you-have-mail-android/app/src/main/res/values/colors.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,4 @@
77
<color name="teal_700">#FF018786</color>
88
<color name="black">#FF000000</color>
99
<color name="white">#FFFFFFFF</color>
10-
<color name="gray_dropdownmenu">#FFDDDDDD</color>
1110
</resources>

0 commit comments

Comments
 (0)