代码示例:
public class MainActivity extends AppCompatActivity implements ViewTreeObserver.OnGlobalLayoutListener {
private View rootView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rootView = findViewById(R.id.rootView);
// 监听视图树的变化
rootView.getViewTreeObserver().addOnGlobalLayoutListener(this);
}
@Override
public void onGlobalLayout() {
Rect r = new Rect();
rootView.getWindowVisibleDisplayFrame(r);
int screenHeight = rootView.getRootView().getHeight();
int keypadHeight = screenHeight - r.bottom;
if (keypadHeight > screenHeight * 0.15) {
// 软键盘弹出时,调整布局
ViewGroup.LayoutParams params = rootView.getLayoutParams();
params.height = (int) (screenHeight - keypadHeight * 1.5);
rootView.setLayoutParams(params);
} else {
// 软键盘关闭时,布局恢复原样
ViewGroup.LayoutParams params = rootView.getLayoutParams();
params.height = ViewGroup.LayoutParams.MATCH_PARENT;
rootView.setLayoutParams(params);
}
}
}