Android10软键盘根据EditText位置显示的完整代码
时间: 2023-07-10 18:28:50 浏览: 181
好的,下面是 Android 10 软键盘根据 EditText 位置显示的完整代码:
```java
import android.graphics.Rect;
import android.os.Bundle;
import android.view.View;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.widget.NestedScrollView;
public class MainActivity extends AppCompatActivity {
private EditText editText;
private NestedScrollView scrollView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.edit_text);
scrollView = findViewById(R.id.scroll_view);
View decorView = getWindow().getDecorView();
decorView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener);
}
@Override
protected void onDestroy() {
super.onDestroy();
View decorView = getWindow().getDecorView();
decorView.getViewTreeObserver().removeOnGlobalLayoutListener(onGlobalLayoutListener);
}
private final OnGlobalLayoutListener onGlobalLayoutListener = new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect rect = new Rect();
editText.getGlobalVisibleRect(rect);
int screenHeight = getResources().getDisplayMetrics().heightPixels;
int keyboardHeight = screenHeight - rect.bottom;
if (keyboardHeight > 0) {
// 软键盘弹出
scrollView.scrollBy(0, keyboardHeight);
} else {
// 软键盘隐藏
scrollView.scrollTo(0, 0);
}
}
};
}
```
其中,`editText` 是需要根据其位置调整软键盘显示位置的 EditText 控件,`scrollView` 是包含 `editText` 的 ScrollView 控件。
在 `onCreate()` 方法中,我们注册了窗口布局变化的监听器,以便在软键盘弹出或隐藏时动态调整 ScrollView 的滚动位置。在 `onDestroy()` 方法中,我们移除了监听器,以免造成内存泄漏。
需要注意的是,在 AndroidManifest.xml 文件中要为该 Activity 添加以下属性:
```xml
<activity android:windowSoftInputMode="adjustResize" />
```
这样,当软键盘弹出时,系统会自动调整 Activity 的布局大小,以便软键盘和 EditText 能够同时显示在屏幕上。
希望这个完整代码对你有所帮助!
阅读全文