打开软键盘时调整布局
在某些应用程序中,我发现在显示软键盘时布局会发生变化。 这当然不是adjustPan
因为整个布局(可能是内部布局)不仅移动了当前的EditText
。 例如在Evernote登录屏幕中。 你能建议这是怎么做的?
这是一个像Evernote登录屏幕一样工作的解决方案:
首先,定义一个类,它将成为您特殊的LinearLayout,如下所示:
public class MyLayout extends LinearLayout {
public MyLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyLayout(Context context) {
super(context);
}
private OnSoftKeyboardListener onSoftKeyboardListener;
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
if (onSoftKeyboardListener != null) {
final int newSpec = MeasureSpec.getSize(heightMeasureSpec);
final int oldSpec = getMeasuredHeight();
if (oldSpec > newSpec){
onSoftKeyboardListener.onShown();
} else {
onSoftKeyboardListener.onHidden();
}
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
public final void setOnSoftKeyboardListener(final OnSoftKeyboardListener listener) {
this.onSoftKeyboardListener = listener;
}
public interface OnSoftKeyboardListener {
public void onShown();
public void onHidden();
}
}
这种布局倾听测量的变化,如果新的测量值<旧的测量值,这意味着屏幕的一部分被软键盘所吃掉。
尽管如此,在你的清单中你需要设置android:windowSoftInputMode="adjustResize"
这样内容将被调整大小,而不仅仅是移动。
整个系统工作如下:你有你的布局:
<MyLayout id="layout">
<SomeImage id="image"/>
<SomeText>
<SomeInput>
</MyLayout>
这就像evernotes登录屏幕。 然后,在你的活动中:
((MyLayout)findViewById(R.id.layout)).setOnSoftKeyboardListener(new OnSoftKeyboardListener() {
@Override
public void onShown() {
findViewById(R.id.image).setVisibility(View.GONE);
}
@Override
public void onHidden() {
findViewById(R.id.image).setVisibility(View.VISIBLE);
}
});
然后转到manifest.xml并设置
android:windowSoftInputMode="adjustResize"
会发生什么情况是,当显示软键盘时,它会隐藏图像并调整其余内容的大小。 (你实际上可以看到如何在Evernote中调整文本大小)
当然,图像隐藏是你可以做的许多事情之一。 但是你必须小心,因为不同的布局变化也会调用onMeasure。
当然这是一个肮脏的变体。 您需要检查方位变化,以及实际进行测量的正确时间,并且在比较新规格和旧规格时可能需要更多逻辑。 但我认为这是做到这一点的唯一方法。
在AndroidManifest.xml中使用“adjustResize”而不是“adjustPan”
<activity
...
android:windowSoftInputMode="adjustResize" />
从文档:
“adjustResize”
该活动的主窗口始终调整大小,以便为屏幕上的软键盘腾出空间。
“adjustPan”
该活动的主窗口没有调整大小以为软键盘腾出空间。 相反,窗口的内容会自动平移,以便当前焦点永远不会被键盘遮挡,用户始终可以看到他们正在键入的内容。 这通常不如调整大小,因为用户可能需要关闭软键盘才能与窗口的遮蔽部分进行交互。
希望它可以帮助你:
http://android-developers.blogspot.com/2009/04/updating-applications-for-on-screen.html
http://davidwparker.com/2011/08/30/android-how-to-float-a-row-above-keyboard/
链接地址: http://www.djcxy.com/p/93423.html