防止背景调整大小并防止自动关注活动开始

Posted

技术标签:

【中文标题】防止背景调整大小并防止自动关注活动开始【英文标题】:Prevent background resize AND prevent auto-focus on activity start 【发布时间】:2014-03-06 16:07:39 【问题描述】:

查了各种关于栈溢出的问题,发现很多人都有以下问题:

    打开软键盘时调整背景大小 活动开始时打开软键盘

解决这两个问题的方法在于ActivityManifest.xml

为防止软键盘打开时背景图像被调整大小,您可以在清单中将android:windowSoftInputMode="stateVisible|adjustPan" 添加到<activity>

为防止在 Activity 启动时打开软键盘,您可以在清单中的 <activity> 中添加 android:windowSoftInputMode="stateHidden"

一个解决方案需要stateHidden 而另一个需要stateVisible 这一事实意味着我不能同时使用这两种解决方案。我希望防止软键盘窃取活动开始的焦点,但防止软键盘在用户确实决定关注EditText时调整背景大小.

这两个问题有可行的解决方案吗?

【问题讨论】:

【参考方案1】:

一个解决方案需要 stateHidden 而另一个需要 stateVisible 表示我不能同时使用这两种解决方案。

是的。但是,你可以使用stateHidden|adjustPan

除非用户单击EditText,否则不会弹出键盘。您的背景可能会发生变化,这将是定位方面的;不会发生背景缩放。

【讨论】:

【参考方案2】:

如果您的 EditText 包装在父容器中,请为该容器设置 android:focusableInTouchMode="true"。基本上,让该容器在活动开始时接收初始焦点。看看这个link

【讨论】:

我以前在其他地方看到过这个解决方案,但它实际上并不适合我。我真的在寻找不那么老套的东西。【参考方案3】:

您的布局的任何部分是否都是可滚动的容器(如 ListView)?如果是这样,请尝试在 XML 布局中的该项目上设置 android:isScrollContainer="false"

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

这是一个类似的问题:What does android:isScrollContainer do?

【讨论】:

【参考方案4】:

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

只需使用下面的活动标签

android:windowSoftInputMode="adjustPan|stateAlwaysHidden"

或者

使用 android:windowSoftInputMode="stateVisible|adjustPan" 到清单中的活动标签。

现在使用您的 EditText 使用 android:focusableInTouchMode="true"android:focusable="false"

【讨论】:

以上是关于防止背景调整大小并防止自动关注活动开始的主要内容,如果未能解决你的问题,请参考以下文章

调整大小时防止 TPaintBox 闪烁

使用 css 防止或禁用 div 中的自动图像调整大小(使用引导程序)

如何防止移动设备调整大小并使用正确的 css 文件

如何防止 UIImageView 使用 Autolayout 调整大小

如何防止调整大小的TextArea溢出页面?

从底部调整大小时防止Windows窗体元素离开视图?