Android 解决输入法键盘遮盖布局问题,程序员不得不用的方案,快捷!

xiaoxiao2021-02-27  299

/** * @param root 最外层布局,需要调整的布局 * @param scrollToView 被键盘遮挡的scrollToView,滚动root,使scrollToView在root可视区域的底部 */ private void listenKeyboardLayout(final LinearLayout root, final View scrollToView) { SoftKeyboardStateHelper keyboardStateHelper = new SoftKeyboardStateHelper(root); keyboardStateHelper.addSoftKeyboardStateListener(new SoftKeyboardStateListener() { @Override public void onSoftKeyboardOpened(int keyboardHeightInPx) { Rect rect = new Rect(); // 获取root在窗体的可视区域 root.getWindowVisibleDisplayFrame(rect); int[] location = new int[2]; // 获取scrollToView在窗体的坐标 scrollToView.getLocationInWindow(location); // 计算root滚动高度,使scrollToView在可见区域的底部 int srollHeight = (location[1] + scrollToView.getHeight()) - rect.bottom; root.scrollTo(0, srollHeight); } @Override public void onSoftKeyboardClosed() { // 键盘隐藏 root.scrollTo(0, 0); } }); }

在此要获取SoftKeyboardStateHelper类

效果图如下:

下面提供完整的代码及布局文件:

MainActivity

public class MainActivity extends Activity {

private LinearLayout mRoot; private Button mSubmit; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mRoot = (LinearLayout) findViewById(R.id.root); mSubmit = (Button) findViewById(R.id.submit); listenKeyboardLayout(root, mSubmit); } /** * @param root 最外层布局,需要调整的布局 * @param scrollToView 被键盘遮挡的scrollToView,滚动root,使scrollToView在root可视区域的底 */

private void listenKeyboardLayout(final LinearLayout root, final View scrollToView) { SoftKeyboardStateHelper keyboardStateHelper = new SoftKeyboardStateHelper(root); keyboardStateHelper.addSoftKeyboardStateListener(new SoftKeyboardStateListener() {

@Override public void onSoftKeyboardOpened(int keyboardHeightInPx) { Rect rect = new Rect(); // 获取root在窗体的可视区域 root.getWindowVisibleDisplayFrame(rect); int[] location = new int[2]; // 获取scrollToView在窗体的坐标 scrollToView.getLocationInWindow(location); // 计算root滚动高度,使scrollToView在可见区域的底部 int srollHeight = (location[1] + scrollToView.getHeight()) - rect.bottom; root.scrollTo(0, srollHeight); } @Override public void onSoftKeyboardClosed() { // 键盘隐藏 root.scrollTo(0, 0); } }); } activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:gravity="center_vertical" > <EditText android:layout_width="fill_parent" android:layout_height="50dip" android:hint="edit1"/> <EditText android:layout_width="fill_parent" android:layout_height="50dip" android:hint="edit2"/> <EditText android:layout_width="fill_parent" android:layout_height="50dip" android:hint="edit3"/> <Button android:id="@+id/submit" android:layout_width="fill_parent" android:layout_height="50dip" android:text="submit"/> </LinearLayout>
转载请注明原文地址: https://www.6miu.com/read-2153.html

最新回复(0)