防止背景调整大小和防止活动启动时自动聚焦

4
在 Stack Overflow 上查询后,我发现许多人都遇到了以下问题:
  1. 软键盘打开时背景图像大小被调整
  2. 活动启动时软键盘弹出
这两个问题的解决方案都在 ActivityManifest.xml 中。
为了防止当软键盘打开时背景图像被调整,你可以在清单文件的 <activity> 标签中加入 android:windowSoftInputMode="stateVisible|adjustPan"
为了防止活动启动时软键盘弹出,你可以在清单文件的 <activity> 标签中加入 android:windowSoftInputMode="stateHidden"
一个解决方案需要用到 stateHidden ,而另一个需要用到 stateVisible ,这意味着我不能同时使用这两个解决方案。我想要防止软键盘在活动启动时抢占焦点,但是同时也想要防止软键盘在用户决定聚焦于 EditText 时调整背景。
是否有一种可行的方法来解决这两个问题?
4个回答

0
如果您的EditText被包含在父容器中,请为该容器设置android:focusableInTouchMode="true"。基本上,让该容器在活动启动时接收初始焦点。请查看此链接

我之前在其他地方看到过这个解决方案,但实际上并没有对我起作用。我真的正在寻找一些更少hacky的东西。 - Mike Baxter

0

基本上有两种方法可以满足您的要求。

  • 只需使用以下活动标签

    android:windowSoftInputMode="adjustPan|stateAlwaysHidden"

    或者

  • 在清单中的活动标记中使用android:windowSoftInputMode="stateVisible|adjustPan"

现在,对于您的EditText,请使用以下内容:android:focusableInTouchMode="true"android:focusable="false"


0
一个解决方案需要 stateHidden,另一个需要 stateVisible,这意味着我不能同时使用两个解决方案。是的,但是您可以使用 stateHidden|adjustPan。只有用户单击 EditText 时,键盘才不会弹出。对于背景的潜在更改将基于定位;背景的缩放将不会发生。

0

你的布局中是否有可滚动容器(例如ListView)?如果是这样,请尝试在XML布局中设置android:isScrollContainer="false"

如果您有任何视图具有android:isScrollContainer="true",则布局管理器将尝试在键盘弹出时调整您的布局大小,而不考虑`android:windowSoftInputMode'。

这里有一个类似的问题:android:isScrollContainer是什么?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接