android adjustNothing 获取键盘高度
实现效果如下,获取键盘高度后,手动移动输入框:
20190402144716388.gif
尽管输入框的弹出不够顺滑,显得有些僵硬,但是大家可以自己加上适当的动画来完善。
方法是给当前的activity覆盖一个宽度为0,高度为match_parent的PopupWindow,设置PopupWindow的mSoftInputMode为SOFT_INPUT_ADJUST_RESIZE,键盘弹出后,根据PopupWindow内容区高度的变化,来计算键盘弹出的高度。
核心代码如下:
public class HeightProvider extends PopupWindow implements OnGlobalLayoutListener { private Activity mActivity; private View rootView; private HeightListener listener; private int heightMax; // 记录popup内容区的最大高度 public HeightProvider(Activity activity) { super(activity); this.mActivity = activity; // 基础配置 rootView = new View(activity); setContentView(rootView); // 监听全局Layout变化 rootView.getViewTreeObserver().addOnGlobalLayoutListener(this); setBackgroundDrawable(new ColorDrawable(0)); // 设置宽度为0,高度为全屏 setWidth(0); setHeight(LayoutParams.MATCH_PARENT); // 设置键盘弹出方式 setSoftInputMode(LayoutParams.SOFT_INPUT_ADJUST_RESIZE); setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); } public HeightProvider init() { if (!isShowing()) { final View view = mActivity.getWindow().getDecorView(); // 推迟加载popupwindow,假如不加推迟就会报错 view.post(new Runnable() { @Override public void run() { showAtLocation(view, Gravity.NO_GRAVITY, 0, 0); } }); } return this; } public HeightProvider setHeightListener(HeightListener listener) { this.listener = listener; return this; } @Override public void onGlobalLayout() { Rect rect = new Rect(); rootView.getWindowVisibleDisplayFrame(rect); if (rect.bottom > heightMax) { heightMax = rect.bottom; } // 两者的差值就是键盘的高度 int keyboardHeight = heightMax - rect.bottom; if (listener != null) { listener.onHeightChanged(keyboardHeight); } } public interface HeightListener { void onHeightChanged(int height); }}使用方式代码如下:
public class MainActivity extends AppCompatActivity { private EditText etBottom; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); etBottom = findViewById(R.id.etBottom); new HeightProvider(this).init().setHeightListener(new HeightProvider.HeightListener() { @Override public void onHeightChanged(int height) { etBottom.setTranslationY(-height); } }); }}<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" android:src="@drawable/test" /> <EditText android:id="@+id/etBottom" android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:background="#ffabcdef" /></RelativeLayout>
在这里插入图片形容
使用起来还是非常简单的,可以把HeightProvider当成一个工具类来用。
github源码
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » android adjustNothing 获取键盘高度
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » android adjustNothing 获取键盘高度