参考网址:输入法导致ExpandableListView的getChildView重绘_老子学不动了啊!的博客-优快云博客
在使用ExpandableListView二级列表时,如果界面中使用到了软键盘或下个界面使用了软键盘没有关闭,再回到二级列表界面应用会崩溃;debug会发现再回到二级列表时列表自己刷新了,通过参考到的文章了解到是因为由于软键盘没有关闭,导致列表的高度进行了重绘而发生的错误
解决办法:
1.如果是在二级列表界面中使用到了软键盘则需要使用此方法:把ExpandableListView的高度设为固定值
避免输入法覆盖界面输入框的方式有以下三种:
方法一:在你的activity中的oncreate中setContentView之前写上这个代码getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
方法二:在项目的AndroidManifest.xml文件中界面对应的<activity>里加入android:windowSoftInputMode="stateVisible|adjustResize",这样会让屏幕整体上移。如果加上的是
android:windowSoftInputMode="adjustPan"这样键盘就会覆盖屏幕。
方法三:把顶级的layout替换成ScrollView,或者说在顶级的Layout上面再加一层ScrollView的封装。这样就会把软键盘和输入框一起滚动了,软键盘会一直处于底部。
2.如果是二级界面(下个界面)中使用了软键盘但没有关闭:在二级界面关闭之前先隐藏掉软键盘
/**
* 软键盘操作
*/
public class SoftInputUtils {
/**
* 显示软键盘,Dialog使用
*
* @param activity 当前Activity
*/
public static void showSoftInput(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
}
/**
* 隐藏软键盘
*
* @param activity 当前Activity
*/
public static void hideSoftInput(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
activity.getWindow().getDecorView().getWindowToken(), 0);
}
/**
*判断输入法是否显示
* @return
*/
public static boolean isSoftShowing(Activity activity) {
//获取当前屏幕内容的高度
int screenHeight = activity.getWindow().getDecorView().getHeight();
//获取View可见区域的bottom
Rect rect = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
return screenHeight * 2 / 3 > rect.bottom;
}
}