Skip to content

Commit 51e6efd

Browse files
author
jiaoyaning
committed
style(横竖屏): 横竖屏样式调整
1 parent dcf7e16 commit 51e6efd

File tree

6 files changed

+106
-43
lines changed

6 files changed

+106
-43
lines changed

app/src/main/java/com/jyn/composecalculator/DateViewModel.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ import androidx.compose.ui.unit.dp
66
import androidx.lifecycle.AndroidViewModel
77

88
class DateViewModel(application: Application) : AndroidViewModel(application) {
9+
var idpPortrait = true
910
var textBoxHeight = 0.dp
1011
var inputText = mutableStateOf("")
12+
var resultText = mutableStateOf("")
1113

1214
fun append(text: String) {
1315
inputText.value = inputText.value + text
@@ -21,4 +23,8 @@ class DateViewModel(application: Application) : AndroidViewModel(application) {
2123
fun clear() {
2224
inputText.value = ""
2325
}
26+
27+
fun calculate() {
28+
resultText.value = "XXXXX"
29+
}
2430
}

app/src/main/java/com/jyn/composecalculator/MainActivity.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.jyn.composecalculator
22

3+
import android.content.res.Configuration.ORIENTATION_PORTRAIT
34
import android.os.Bundle
45
import androidx.activity.ComponentActivity
56
import androidx.activity.compose.setContent
@@ -10,19 +11,25 @@ import androidx.compose.material3.MaterialTheme
1011
import androidx.compose.runtime.Composable
1112
import androidx.compose.ui.Alignment
1213
import androidx.compose.ui.Modifier
14+
import androidx.compose.ui.platform.LocalConfiguration
1315
import androidx.compose.ui.tooling.preview.Preview
1416
import androidx.lifecycle.viewmodel.compose.viewModel
1517
import com.apkfuns.logutils.LogUtils
1618
import com.jyn.composecalculator.ui.BottomBtnView
1719
import com.jyn.composecalculator.ui.TopResultView
1820
import com.jyn.composecalculator.ui.theme.ComposeCalculatorTheme
1921

22+
const val BOTTOM_FRACTION = 0.67f
23+
var isPortrait = false
24+
2025
class MainActivity : ComponentActivity() {
2126
override fun onCreate(savedInstanceState: Bundle?) {
2227
super.onCreate(savedInstanceState)
2328
LogUtils.getLogConfig().configShowBorders(false)
2429
setContent {
2530
ComposeCalculatorTheme {
31+
//是否是竖屏
32+
isPortrait = LocalConfiguration.current.orientation == ORIENTATION_PORTRAIT
2633
val viewModel = viewModel<DateViewModel>()
2734
LogUtils.tag("viewModel").i("MainActivity viewModel : $viewModel")
2835
ContentView()

app/src/main/java/com/jyn/composecalculator/ui/BottomBtnView.kt

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,23 @@
11
package com.jyn.composecalculator.ui
22

3+
import android.content.res.Configuration
34
import androidx.compose.foundation.background
45
import androidx.compose.foundation.layout.*
56
import androidx.compose.foundation.shape.RoundedCornerShape
67
import androidx.compose.material3.*
78
import androidx.compose.runtime.Composable
89
import androidx.compose.ui.Alignment
910
import androidx.compose.ui.Modifier
11+
import androidx.compose.ui.platform.LocalConfiguration
1012
import androidx.compose.ui.res.painterResource
1113
import androidx.compose.ui.tooling.preview.Preview
1214
import androidx.compose.ui.unit.dp
1315
import androidx.compose.ui.unit.sp
1416
import androidx.lifecycle.viewmodel.compose.viewModel
17+
import com.jyn.composecalculator.BOTTOM_FRACTION
1518
import com.jyn.composecalculator.DateViewModel
1619
import com.jyn.composecalculator.R
20+
import com.jyn.composecalculator.isPortrait
1721

1822
/**
1923
* 底部按钮
@@ -26,22 +30,30 @@ private val numberColumns = listOf(
2630
listOf("÷", "×", "-", "+", "="),
2731
)
2832

29-
const val BOTTOM_FRACTION = 0.67f
30-
3133
@Preview(showBackground = true)
3234
@Composable
3335
fun BottomBtnView() {
34-
Surface(
36+
Row(
3537
Modifier
3638
.padding(bottom = 10.dp)
37-
.background(MaterialTheme.colorScheme.secondary)
3839
.fillMaxHeight(BOTTOM_FRACTION)
39-
.fillMaxWidth()
4040
) {
41+
if (!isPortrait) {
42+
Row( //数列
43+
modifier = Modifier
44+
.fillMaxHeight()
45+
.weight(1f)
46+
.padding(10.dp),
47+
horizontalArrangement = Arrangement.SpaceBetween
48+
) {
49+
}
50+
}
51+
52+
//竖屏基础按钮
4153
Row( //数列
4254
modifier = Modifier
4355
.fillMaxHeight()
44-
.fillMaxWidth()
56+
.weight(1f)
4557
.padding(10.dp),
4658
horizontalArrangement = Arrangement.SpaceBetween
4759
) {
@@ -58,7 +70,7 @@ fun BottomBtnView() {
5870
modifier = Modifier
5971
.padding(bottom = 10.dp)
6072
.weight(1f)
61-
.aspectRatio(1f)
73+
.then(if (isPortrait) Modifier.aspectRatio(1f) else Modifier)
6274
) {
6375
ItemBtn(text = it)
6476
}
@@ -88,12 +100,16 @@ fun ItemBtn(text: String) {
88100
contentAlignment = Alignment.Center
89101
) {
90102
if (text == "D") {
91-
Icon(painter = painterResource(R.drawable.ic_backspace), contentDescription = "")
103+
Icon(
104+
modifier = Modifier.size(if (isPortrait) 30.dp else 15.dp),
105+
painter = painterResource(R.drawable.ic_backspace),
106+
contentDescription = ""
107+
)
92108
return@Box
93109
}
94110
Text(
95111
text = text,
96-
fontSize = 30.sp
112+
fontSize = if (isPortrait) 30.sp else 15.sp
97113
)
98114
}
99115
}
@@ -108,5 +124,7 @@ fun textClick(viewModel: DateViewModel, text: String) {
108124
-> viewModel.delete()
109125
"C"
110126
-> viewModel.clear()
127+
"="
128+
-> viewModel.calculate()
111129
}
112130
}

app/src/main/java/com/jyn/composecalculator/ui/TopResultView.kt

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.jyn.composecalculator.ui
22

3-
import androidx.compose.animation.animateColor
4-
import androidx.compose.animation.core.*
5-
import androidx.compose.foundation.background
3+
import android.content.res.Configuration
64
import androidx.compose.foundation.gestures.Orientation
75
import androidx.compose.foundation.horizontalScroll
86
import androidx.compose.foundation.indication
@@ -15,14 +13,12 @@ import androidx.compose.material.FractionalThreshold
1513
import androidx.compose.material.SwipeableDefaults.resistanceConfig
1614
import androidx.compose.material.rememberSwipeableState
1715
import androidx.compose.material.swipeable
18-
import androidx.compose.material3.MaterialTheme
1916
import androidx.compose.material3.Surface
2017
import androidx.compose.material3.Text
2118
import androidx.compose.runtime.*
2219
import androidx.compose.ui.Alignment
2320
import androidx.compose.ui.Modifier
2421
import androidx.compose.ui.graphics.Color
25-
import androidx.compose.ui.graphics.graphicsLayer
2622
import androidx.compose.ui.layout.onSizeChanged
2723
import androidx.compose.ui.platform.LocalConfiguration
2824
import androidx.compose.ui.platform.LocalDensity
@@ -33,7 +29,9 @@ import androidx.compose.ui.unit.dp
3329
import androidx.compose.ui.unit.sp
3430
import androidx.lifecycle.viewmodel.compose.viewModel
3531
import com.apkfuns.logutils.LogUtils
32+
import com.jyn.composecalculator.BOTTOM_FRACTION
3633
import com.jyn.composecalculator.DateViewModel
34+
import com.jyn.composecalculator.ui.draw.CursorView
3735
import com.jyn.composecalculator.ui.draw.SlideIndicator
3836

3937
/**
@@ -73,7 +71,7 @@ fun TopResultView() {
7371
resistance = resistanceConfig(
7472
anchors.keys,
7573
10.dp.value,
76-
5f
74+
0f
7775
),
7876
velocityThreshold = 60.dp
7977
),
@@ -87,7 +85,6 @@ fun TopResultView() {
8785

8886
@Composable
8987
fun TextBox(process: Float) {
90-
val isMax = process >= 100
9188
val viewModel = viewModel<DateViewModel>()
9289
Column(
9390
modifier = Modifier
@@ -120,11 +117,16 @@ fun InputText(input: String) {
120117
val viewModel = viewModel<DateViewModel>()
121118

122119
val mutableInteractionSource = remember { MutableInteractionSource() }
123-
val scrollState = rememberScrollState()
124-
val textWidth = remember { mutableStateOf(0) }
120+
val inputScrollState = rememberScrollState()
121+
val resultScrollState = rememberScrollState()
122+
val inputTextWidth = remember { mutableStateOf(0) }
123+
val resultTextWidth = remember { mutableStateOf(0) }
125124

126-
LaunchedEffect(textWidth.value) {
127-
scrollState.scrollTo(textWidth.value) //自动滚动到最后一个
125+
LaunchedEffect(inputTextWidth.value) {
126+
inputScrollState.scrollTo(inputTextWidth.value) //自动滚动到最后一个
127+
}
128+
LaunchedEffect(inputTextWidth.value) {
129+
resultScrollState.scrollTo(resultTextWidth.value) //自动滚动到最后一个
128130
}
129131

130132
Column(
@@ -135,40 +137,31 @@ fun InputText(input: String) {
135137
Text(
136138
modifier = Modifier
137139
.weight(1f)
138-
.horizontalScroll(scrollState)
140+
.horizontalScroll(inputScrollState)
139141
.indication( //水波纹效果怎么去除无效呢,bug?
140142
indication = null,
141143
interactionSource = mutableInteractionSource
142144
)
143-
.onSizeChanged { textWidth.value = it.width },
145+
.onSizeChanged { inputTextWidth.value = it.width },
144146
text = input,
145147
maxLines = 1,
146148
fontSize = 50.sp,
147149
textAlign = TextAlign.End,
148150
)
149151
CursorView()
150152
}
151-
}
152-
}
153153

154-
/**
155-
* 光标
156-
*/
157-
@Preview(showBackground = true)
158-
@Composable
159-
fun CursorView() {
160-
val infiniteTransition = rememberInfiniteTransition()
161-
val float = infiniteTransition.animateFloat(
162-
initialValue = 0f, targetValue = 1f, animationSpec = infiniteRepeatable(
163-
animation = tween(1000, easing = LinearEasing),
164-
repeatMode = RepeatMode.Restart
154+
Text(
155+
text = viewModel.resultText.value,
156+
modifier = Modifier
157+
.fillMaxWidth()
158+
.padding(end = 5.dp)
159+
.horizontalScroll(inputScrollState)
160+
.onSizeChanged { resultTextWidth.value = it.width },
161+
maxLines = 1,
162+
fontSize = 30.sp,
163+
color = Color.Gray,
164+
textAlign = TextAlign.End,
165165
)
166-
)
167-
168-
Spacer(
169-
modifier = Modifier
170-
.background(if (float.value > 0.5) Color.Red else Color.Transparent)
171-
.width(2.dp)
172-
.height(50.dp)
173-
)
166+
}
174167
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.jyn.composecalculator.ui.calculate
2+
3+
fun calculateU(input: String): String {
4+
return "XXXXX"
5+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.jyn.composecalculator.ui.draw
2+
3+
import androidx.compose.animation.core.*
4+
import androidx.compose.foundation.background
5+
import androidx.compose.foundation.layout.Spacer
6+
import androidx.compose.foundation.layout.height
7+
import androidx.compose.foundation.layout.width
8+
import androidx.compose.runtime.Composable
9+
import androidx.compose.ui.Modifier
10+
import androidx.compose.ui.graphics.Color
11+
import androidx.compose.ui.tooling.preview.Preview
12+
import androidx.compose.ui.unit.dp
13+
14+
/**
15+
* 光标
16+
*/
17+
@Preview(showBackground = true)
18+
@Composable
19+
fun CursorView() {
20+
val infiniteTransition = rememberInfiniteTransition()
21+
val float = infiniteTransition.animateFloat(
22+
initialValue = 0f, targetValue = 1f, animationSpec = infiniteRepeatable(
23+
animation = tween(1000, easing = LinearEasing),
24+
repeatMode = RepeatMode.Restart
25+
)
26+
)
27+
28+
Spacer(
29+
modifier = Modifier
30+
.background(if (float.value > 0.5) Color.Red else Color.Transparent)
31+
.width(2.dp)
32+
.height(50.dp)
33+
)
34+
}

0 commit comments

Comments
 (0)