gpt4 book ai didi

android - 开启软键盘时调整布局

转载 作者:IT王子 更新时间:2023-10-29 00:08:35 26 4
gpt4 key购买 nike

我在某些应用程序中看到显示软键盘时布局会发生变化。这肯定不是 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();
}

}

这种布局会监听测量值的变化,如果新的测量值小于旧的测量值,这意味着屏幕的一部分被软键盘吃掉了。

不过,要使其正常工作,您需要在 list 中设置 android:windowSoftInputMode="adjustResize" 以便调整内容的大小而不仅仅是移动。

整个系统的工作原理如下:你有你的布局:

<MyLayout id="layout">
<SomeImage id="image"/>
<SomeText>
<SomeInput>
</MyLayout>

这就像evernotes 登录屏幕。然后,在您的 Activity 中:

((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。

当然,这是一个肮脏的变体。您需要检查方向变化,以及实际进行测量的正确时间,以及在将新规范与旧规范进行比较时可能需要更多逻辑。但我认为这是唯一的方法。

关于android - 开启软键盘时调整布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7300497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com