防止背景调整大小并防止自动关注活动开始
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"
。
【讨论】:
以上是关于防止背景调整大小并防止自动关注活动开始的主要内容,如果未能解决你的问题,请参考以下文章
使用 css 防止或禁用 div 中的自动图像调整大小(使用引导程序)