假设我有一些关于jetpack-compose内容的活动
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ScrollableColumn(
modifier = Modifier
.fillMaxSize()
.border(4.dp, Color.Red)
) {
val (text, setText) = remember { mutableStateOf("") }
TextField(
value = text,
onValueChange = setText,
label = {},
modifier = Modifier
.fillMaxWidth()
)
for (i in 0..100) {
Text("Item #$i")
}
}
}
}
}
如果我要启动此活动并专注于文本字段,就会弹出一个软件键盘。
但是,该接口不会对此做出反应。可滚动列的下边框(.border(4.dp,Color.Red))
以及第100个项目(Text(“Item #$i”))
将不可见。
换句话说,软键盘与内容重叠。
如何使jetpack在可见区域发生变化(由于软件键盘)?
我也面临同样的问题。
使用<code>OnGlobalLayoutListener</code>将观察实际的输入法矩形大小,并在软键盘完全可见时触发。
适用于我的解决方案:
val bringIntoViewRequester = remember { BringIntoViewRequester() }
val scope = rememberCoroutineScope()
val view = LocalView.current
DisposableEffect(view) {
val listener = ViewTreeObserver.OnGlobalLayoutListener {
scope.launch { bringIntoViewRequester.bringIntoView() }
}
view.viewTreeObserver.addOnGlobalLayoutListener(listener)
onDispose { view.viewTreeObserver.removeOnGlobalLayoutListener(listener) }
}
TextField(
modifier = Modifier.bringIntoViewRequester(bringIntoViewRequester),
...
)
起源于这里
您可以使用陪同者的插图库https://google.github.io/accompanist/insets
首先,在应用程序主题下的大多数情况下,在可组合层次结构的根位置使用ProvideWinSet,然后将WindowInsetsAnimationEnabled设置为true
ProvideWindowInsets(windowInsetsAnimationsEnabled = true) {
// content }
在TextField上使用NavigationBarswithImePadd()修饰符
OutlinedTextField(
// other params,
modifier = Modifier.navigationBarsWithImePadding() )
最后,请确保从您的活动(在onCreate内部)调用WindowCompat.setDecorFitsSystemWindows(window,false)。如果您希望软件键盘开/关动画设置活动的窗口SoftInputMode adjust在Android中调整大小
<activity
android:name=".MyActivity"
android:windowSoftInputMode="adjustResize">
您可以使用标准的android程序,但我不知道是否存在特定的撰写方式。
如果将 SoftInputMode 设置为SOFT_INPUT_ADJUST_RESIZE
,则布局将在键盘更改时调整大小。
class YourActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
setContent { /* Composable Content */ }
}
}
否则,您可以使用清单中的标志。有关更多信息,请参阅此处:在显示软键盘时向上移动布局?
我们正在做一个类似Whatsapp的应用程序,所以我们展示了一个表情面板或软键盘。我们正在使用adjustResize,因为我们需要获得软键盘的高度(为了确保表情面板与软键盘具有相同的高度),一切都正常,但是,当从表情面板更改为键盘时,我们看到edittext如何到达底部,然后随着软键盘上升。 在显示软键盘时,如何修复edittext?在显示键盘之前,我曾考虑过从adjustResize更改为ad
我在UIView的底部有一个文本视图,所以当触摸文本视图并且键盘显示时,键盘会阻止文本视图。我该如何解决这个问题?当键盘显示时,我可以让整个UIView向上移动吗?这样键盘就不会阻止任何东西
我的列表视图底部有一个编辑文本。当我点击编辑文本时,软键盘如预期的那样弹出,同时listview向上滑动,将编辑文本放置在键盘上方。然而,一旦我开始输入,ListView就会滑回来,EditText现在位于软键盘后面,挡住了输入的视图。我仍然可以打字,但是编辑文本被软键盘覆盖了。 如何使编辑文本在键盘上方可见? PS。我正在使用adjustPan 编辑:这是一个与我面临的问题相同的人的链接,但我看
我正在为用户编写一个选择国家的过程。我有一个edittext链接到适配器,显示所有可用选项。 在我的清单中,我将活动设置为 android: windowSoftInputMode="stateAlwaysHidden" 我需要完全禁用软键盘。 除了一种情况外,它工作正常。如果用户长时间点击/按下编辑文本,键盘就会弹出。 有没有办法通过使用代码或在清单中永久禁用特定活动中的键盘? 我的代码: 我的
问题内容: 这个问题已经在这里有了答案 : 如何查看文件中的更改? (25个答案) 7年前关闭。 我正在寻找一个跨平台的文件监视python包?我知道可以使用pywin32监视Windows上的文件,并且有可以在Linux / Unix上运行的软件包,但是有人知道跨平台的吗? 问题答案: 对于基于Unix / Linux的系统,您应该使用File Alteration Monitor Python
我有带有edittext字段的自定义模板。当我点击软键盘上的“下一步”按钮时,它只移动了两次焦点--比按钮变成了“确定”。清单有12项。有没有办法导航到所有的项目,而不仅仅是2?你能帮帮我吗? 公共视图getView(int position,View convertView,ViewGroup parent){ }