开发遇到一个问题,就是布局里内容太多,只能用加入一个 scrollview,而scrollview里有两个edittext控件,想要实现的效果是点击edittext输入框时,能把scrollview最底的内容显示出来,以前记得只要修改AndroidManifest.xml里 activity里的配置就可以了( android:windowSoftInputMode="adjustPan,其用法可以网上查,不多说"),但项目里把windowSoftInputMode 方法都尝试过不行,因为项目急,只能想其他办法了。
方法是监听键盘弹起 再让scrolliew滚动到底
// 监听键盘收 隐
public final class SoftKeyboardUtil {
public static final String TAG = "SoftKeyboardUtil";
public void addOnSoftKeyBoardVisibleListener(Activity activity) {
final View decorView = activity.getWindow().getDecorView();
decorView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect rect = new Rect();
decorView.getWindowVisibleDisplayFrame(rect);
int displayHight = rect.bottom - rect.top;
int hight = decorView.getHeight();
boolean visible = (double) displayHight / hight < 0.8;// 决断键盘是弹出
System.out.println("===监听" + visible);
if (visible) {
Handler mHandler = new Handler();
if (mEditText_newnumber.hasFocus()) {
mEditText_pwd.setVisibility(View.INVISIBLE);
}
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
scrollView.fullScroll(ScrollView.FOCUS_DOWN);// ScrollView滚动到底
mEditText_pwd.setVisibility(View.VISIBLE);
}
}, 50);
}
}
});
}
}
但是在滚动到底后 无论焦点是在第一个edittext上还是最后一个edittext上 ,焦点都会移动到最后一个edittext控件上,这样不合理
投机取巧解决方案:在滚动前 把最后的一个edittext 修改为View.INVISIBLE 等滚动后再view.visible 后可以解决