android 自定义键盘 完成闪退,Android 弹出软键盘所遇到的坑及解决方法

重要代码:

//1、此layout作为最外层的layout;

//2、设置需要调整的view: setAdjustView(View view);

//3、如果需要控制输入框的显示与隐藏,可以实现OnInputViewVisibleListener接口;

public class SoftInputAdjustLayout extends RelativeLayout {

private static final String TAG = SoftInputAdjustLayout.class.getSimpleName();

private View adjustView;

public SoftInputAdjustLayout(Context context) {

this(context, null);

}

public SoftInputAdjustLayout(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public SoftInputAdjustLayout(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

this.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

@Override

public void onGlobalLayout() {

try {

Rect r = new Rect();

getWindowVisibleDisplayFrame(r);

int heightDiff = getRootView().getHeight() - (r.bottom - r.top);

if (heightDiff > 100) {

if (onInputViewVisibleListener != null) {

onInputViewVisibleListener.onShowInputView();

}

} else {

if (onInputViewVisibleListener != null) {

onInputViewVisibleListener.onHideInputView();

}

}

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

/**

* 需要调整的view

*

* @param adjustView

*/

public void setAdjustView(View adjustView) {

this.adjustView = adjustView;

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

if (adjustView != null) {

Rect rect = new Rect();

getWindowVisibleDisplayFrame(rect);

int totalHeight = getHeight();

int nowHeight = rect.bottom - rect.top;

int keyBoardHeight = totalHeight - nowHeight;

if (keyBoardHeight > totalHeight / 4) {

super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(totalHeight, MeasureSpec.EXACTLY));

LayoutParams params = (LayoutParams) adjustView.getLayoutParams();

params.bottomMargin = keyBoardHeight;

} else {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

LayoutParams params = (LayoutParams) adjustView.getLayoutParams();

params.bottomMargin = 0;

}

} else {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

}

}

private OnInputViewVisibleListener onInputViewVisibleListener;

public void setOnInputViewVisibleListener(OnInputViewVisibleListener listener) {

onInputViewVisibleListener = listener;

}

public interface OnInputViewVisibleListener {

void onShowInputView();

void onHideInputView();

}

}

备注:

全屏模式:

1、通过style或者setFlags(…)来设置全屏;

2、AndroidManifest.xml中activity设置:android:windowSoftInputMode=”adjustResize”;

3、此layout必须作为布局的最外层layout;

4、一定要在布局中添加一个view,如下:

android:layout_width="0px"

android:layout_height="0px"

android:focusable="true"

android:focusableInTouchMode="true" />

5、通过setAdjustView(View view)来设置需要调整的view;

6、在全屏模式下,输入框开始是未显示的,直到弹出软键盘,才会显示输入框。因为如果输入框一开始就显示,那软键盘就会根据输入框来弹出,且输入框在底部,那就可能造成把整个view顶上去。所以这时我们应该实现OnInputViewVisibleListener这个接口来控制输入框的显示与隐藏。

非全屏模式

1、AndroidManifest.xml中activity设置:android:windowSoftInputMode=”adjustResize”;

2、此layout必须作为布局的最外层layout;

3、通过setAdjustView(View view)来设置需要调整的view;

4、如果需要控制输入框的显示与隐藏,就实现OnInputViewVisibleListener这个接口。

以上所述是小编给大家介绍的Android 弹出软键盘所遇到的坑及解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值