Keyboard management on login screen.
This commit is contained in:
parent
fc88b881b4
commit
b05d9d0cf3
2 changed files with 32 additions and 4 deletions
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
|
|
@ -79,6 +79,8 @@
|
||||||
<entry key="../../../../../layout/compose-model-1620400432847.xml" value="0.28125" />
|
<entry key="../../../../../layout/compose-model-1620400432847.xml" value="0.28125" />
|
||||||
<entry key="../../../../../layout/compose-model-1620400507721.xml" value="0.2962962962962963" />
|
<entry key="../../../../../layout/compose-model-1620400507721.xml" value="0.2962962962962963" />
|
||||||
<entry key="../../../../../layout/compose-model-1620400535629.xml" value="0.16300675675675674" />
|
<entry key="../../../../../layout/compose-model-1620400535629.xml" value="0.16300675675675674" />
|
||||||
|
<entry key="../../../../../layout/compose-model-1620401962136.xml" value="0.28125" />
|
||||||
|
<entry key="../../../../../layout/compose-model-1620402873003.xml" value="0.28125" />
|
||||||
<entry key="app/src/main/res/drawable-v24/ic_launcher_foreground.xml" value="0.2898148148148148" />
|
<entry key="app/src/main/res/drawable-v24/ic_launcher_foreground.xml" value="0.2898148148148148" />
|
||||||
<entry key="app/src/main/res/drawable/ic_baseline_local_library_24.xml" value="0.25462962962962965" />
|
<entry key="app/src/main/res/drawable/ic_baseline_local_library_24.xml" value="0.25462962962962965" />
|
||||||
<entry key="app/src/main/res/drawable/ic_google.xml" value="0.2962962962962963" />
|
<entry key="app/src/main/res/drawable/ic_google.xml" value="0.2962962962962963" />
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,12 @@ import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.rememberScrollState
|
import androidx.compose.foundation.rememberScrollState
|
||||||
|
import androidx.compose.foundation.text.KeyboardActions
|
||||||
|
import androidx.compose.foundation.text.KeyboardOptions
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
import androidx.compose.material.*
|
import androidx.compose.material.*
|
||||||
import androidx.compose.material.ButtonDefaults.outlinedButtonColors
|
import androidx.compose.material.ButtonDefaults.outlinedButtonColors
|
||||||
import androidx.compose.material.TextFieldDefaults.outlinedTextFieldColors
|
import androidx.compose.material.TextFieldDefaults.outlinedTextFieldColors
|
||||||
import androidx.compose.material.TextFieldDefaults.textFieldColors
|
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.sharp.Visibility
|
import androidx.compose.material.icons.sharp.Visibility
|
||||||
import androidx.compose.material.icons.sharp.VisibilityOff
|
import androidx.compose.material.icons.sharp.VisibilityOff
|
||||||
|
|
@ -16,8 +17,12 @@ import androidx.compose.runtime.*
|
||||||
import androidx.compose.runtime.livedata.observeAsState
|
import androidx.compose.runtime.livedata.observeAsState
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.focus.FocusRequester
|
||||||
|
import androidx.compose.ui.focus.focusRequester
|
||||||
|
import androidx.compose.ui.platform.LocalFocusManager
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import androidx.compose.ui.text.input.ImeAction
|
||||||
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||||
import androidx.compose.ui.text.input.VisualTransformation
|
import androidx.compose.ui.text.input.VisualTransformation
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
|
@ -63,17 +68,24 @@ fun LoginScreenComposable(
|
||||||
|
|
||||||
Spacer(modifier = Modifier.weight(1f))
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
|
|
||||||
|
val focusRequester = remember { FocusRequester() }
|
||||||
|
val localFocus = LocalFocusManager.current
|
||||||
LoginField(
|
LoginField(
|
||||||
viewModel = authenticationViewModel,
|
viewModel = authenticationViewModel,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(bottom = 16.dp)
|
.padding(bottom = 16.dp),
|
||||||
|
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
|
||||||
|
keyboardActions = KeyboardActions { focusRequester.requestFocus() }
|
||||||
)
|
)
|
||||||
PasswordField(
|
PasswordField(
|
||||||
viewModel = authenticationViewModel,
|
viewModel = authenticationViewModel,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(bottom = 16.dp)
|
.padding(bottom = 16.dp)
|
||||||
|
.focusRequester(focusRequester),
|
||||||
|
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
|
||||||
|
keyboardActions = KeyboardActions { localFocus.clearFocus() }
|
||||||
)
|
)
|
||||||
CredentialRemember(
|
CredentialRemember(
|
||||||
viewModel = authenticationViewModel,
|
viewModel = authenticationViewModel,
|
||||||
|
|
@ -122,7 +134,12 @@ fun LoginScreenComposable(
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun LoginField(viewModel: AuthenticationViewModel, modifier: Modifier = Modifier) {
|
private fun LoginField(
|
||||||
|
viewModel: AuthenticationViewModel,
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
|
||||||
|
keyboardActions: KeyboardActions = KeyboardActions(),
|
||||||
|
) {
|
||||||
val login: State<String?> = viewModel.login.observeAsState()
|
val login: State<String?> = viewModel.login.observeAsState()
|
||||||
TextField(
|
TextField(
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
|
|
@ -132,11 +149,18 @@ private fun LoginField(viewModel: AuthenticationViewModel, modifier: Modifier =
|
||||||
colors = outlinedTextFieldColors(),
|
colors = outlinedTextFieldColors(),
|
||||||
maxLines = 1,
|
maxLines = 1,
|
||||||
singleLine = true,
|
singleLine = true,
|
||||||
|
keyboardOptions = keyboardOptions,
|
||||||
|
keyboardActions = keyboardActions,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
private fun PasswordField(viewModel: AuthenticationViewModel, modifier: Modifier = Modifier) {
|
private fun PasswordField(
|
||||||
|
viewModel: AuthenticationViewModel,
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
|
||||||
|
keyboardActions: KeyboardActions = KeyboardActions(),
|
||||||
|
) {
|
||||||
val password = viewModel.password.observeAsState()
|
val password = viewModel.password.observeAsState()
|
||||||
var passwordVisibility by remember { mutableStateOf(false) }
|
var passwordVisibility by remember { mutableStateOf(false) }
|
||||||
TextField(
|
TextField(
|
||||||
|
|
@ -156,6 +180,8 @@ private fun PasswordField(viewModel: AuthenticationViewModel, modifier: Modifier
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
keyboardOptions = keyboardOptions,
|
||||||
|
keyboardActions = keyboardActions,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue