Android软键盘处理
来源:互联网 发布:比特币高频交易算法 编辑:程序博客网 时间:2024/05/16 17:48
在此,不会提出android:windowSoftInputMode这个相关属性,因为网上也比较多。
主要讲解,当android:windowSoftInputMode无效果(全屏或者其他情况)或者不想屏幕变形又不想内容被遮挡的情况。我想处理方式只有一种移动控件又或者滚动控件。
网上有些说在外层添加ScrollView进行滚动个人感觉不是很合适,而且不适用多数场景,因此在这块提一些个人的解决方式,以便帮到大家。
核心代码如下:
private Button moBtnLogin; /** 登陆按钮距底部距离 (此处我们做 软键盘不会遮挡登录按钮的方式)*/ private int mBtnLoginBottomHeight = -1; @SuppressLint("NewApi") private void keyBoardChangedListener() { //根布局 final View decordView = this.getWindow().getDecorView(); //偏移量 //此处数据 请自己添加工具类进行px dp 转化 30给的是px值,可以根据需求修改 final int scaleHeight = 30; //监听布局宽、高等信息,详细用法可自行查找 decordView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { //获取改变后的根布局 Rect rect = new Rect(); decordView.getWindowVisibleDisplayFrame(rect); int disHeight = rect.bottom - rect.top; // 比较Activity根布局与当前布局的大小 int heightDiff = decordView.getRootView().getHeight() - disHeight; if (mBtnLoginBottomHeight == -1) { //登录按钮距底部的高度 int position[] = new int[2]; moBtnLogin.getLocationOnScreen(position); mBtnLoginBottomHeight = FeizaoApp.metrics.heightPixels - position[1] - moBtnLogin.getHeight(); } //高度差大于100 且 大于登录按钮距底部的距离,滚动登录按钮的父View //不能直接滚动跟布局 以及 单独的View 详细请看scrollTo方法的介绍再次不做赘述 if (heightDiff > 100 && mBtnLoginBottomHeight <= heightDiff) ((View) moBtnLogin.getParent()).scrollTo(0, heightDiff - mBtnLoginBottomHeight + scaleHeight);//键盘显示操作 else ((View) moBtnLogin.getParent()).scrollTo(0, 0);//键盘隐藏操作 } }); }
布局文件代码:
<RelativeLayout xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/login_bg2"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/logo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/title" android:layout_centerHorizontal="true" android:layout_marginBottom="43.33dp" android:layout_marginTop="91.33dp" android:contentDescription="@string/app_name" android:src="@drawable/login_logo" /> <RelativeLayout android:id="@+id/login_ll_account" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/logo" android:layout_centerHorizontal="true" android:layout_marginLeft="30dip" android:layout_marginRight="30dip" android:gravity="center" > <ImageView android:id="@+id/login_iv_account" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="16.66dp" android:layout_marginTop="2dip" android:contentDescription="@string/app_name" android:src="@drawable/ic_login_account" /> <EditText android:id="@+id/login_et_account" android:layout_width="match_parent" android:layout_height="30dip" android:layout_toRightOf="@id/login_iv_account" android:background="@color/trans" android:gravity="top" android:hint="@string/input_username" android:maxLength="30" android:paddingLeft="10dp" android:paddingRight="10dp" android:singleLine="true" android:textColor="@color/a_text_color_ffffff" android:textColorHint="@color/edit_text_gray" android:textSize="@dimen/a_text_size_42" /> <View style="@style/divider_horizontal" android:layout_below="@id/login_et_account" /> <ImageView android:id="@+id/login_iv_account_delete" android:layout_width="30dp" android:layout_height="30dp" android:padding="6dp" android:src="@drawable/icon_delete_x" android:visibility="gone" /> </RelativeLayout> <RelativeLayout android:id="@+id/login_ll_pwd" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/login_ll_account" android:layout_centerHorizontal="true" android:layout_marginLeft="30dip" android:layout_marginRight="30dip" android:layout_marginTop="26.66dp" android:gravity="center" > <ImageView android:id="@+id/login_iv_psw" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="16.66dp" android:layout_marginTop="2dip" android:contentDescription="@string/app_name" android:src="@drawable/ic_login_pwd" /> <EditText android:id="@+id/login_et_pwd" android:layout_width="match_parent" android:layout_height="30dip" android:layout_toRightOf="@id/login_iv_psw" android:background="@color/trans" android:gravity="top" android:hint="@string/input_password" android:inputType="textPassword" android:maxLength="30" android:paddingLeft="10dp" android:paddingRight="10dp" android:singleLine="true" android:textColor="@color/a_text_color_ffffff" android:textColorHint="@color/edit_text_gray" android:textSize="@dimen/a_text_size_42" /> <View style="@style/divider_horizontal" android:layout_below="@id/login_et_pwd" /> <ImageView android:id="@+id/login_iv_psw_delete" android:layout_width="30dp" android:layout_height="30dp" android:padding="6dp" android:src="@drawable/icon_delete_x" android:visibility="gone" /> </RelativeLayout> <Button android:id="@+id/login_btn_login" android:layout_width="match_parent" android:layout_height="42.66dp" android:layout_below="@id/login_ll_pwd" android:layout_centerHorizontal="true" android:layout_marginLeft="30dip" android:layout_marginRight="30dip" android:layout_marginTop="16.66dp" android:background="@drawable/btn_bg_send_selector" android:text="@string/login" android:textColor="@color/white" android:textSize="14sp" /> <LinearLayout android:id="@+id/other_operater" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/login_btn_login" android:layout_marginLeft="30dip" android:layout_marginRight="30dip" android:layout_marginTop="12dp" android:gravity="center_vertical" > <TextView android:id="@+id/login_btn_register" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center_horizontal" android:paddingBottom="2dip" android:paddingTop="2dip" android:text="@string/new_register" android:textColor="@color/a_text_ffffff_80ffffff_selector" android:textSize="@dimen/a_text_size_42" /> <View style="@style/divider_vertical" android:layout_height="14dp" android:layout_gravity="center_vertical" android:background="@color/a_text_color_ffffff" /> <TextView android:id="@+id/login_tv_forget_pwd" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center_horizontal" android:paddingBottom="2dip" android:paddingTop="2dip" android:text="@string/forget_password" android:textColor="@color/a_text_ffffff_80ffffff_selector" android:textSize="@dimen/a_text_size_42" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:gravity="center_horizontal" android:orientation="horizontal" > <ImageView android:id="@+id/login_ll_by_qq" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/app_name" android:src="@drawable/btn_qq_login_selector" /> <ImageView android:id="@+id/login_ll_by_weixin" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="18dip" android:contentDescription="@string/app_name" android:src="@drawable/btn_weixin_login_selector" /> <ImageView android:id="@+id/login_ll_by_weibo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="18dip" android:layout_marginBottom="60dp" android:contentDescription="@string/app_name" android:src="@drawable/btn_weibo_login_selector" /> </LinearLayout> </RelativeLayout></RelativeLayout>
再次提供demo链接,仅供参考:
下载Demo请点击
有问题请留言,或联系本人Qq:63724830
0 0
- Android处理软键盘
- Android软键盘处理
- android软键盘事件处理
- Android 软键盘弹出处理
- Android 软键盘的处理
- Android软键盘一些处理
- android之 处理软键盘隐藏
- android 软键盘Enter键事件处理
- Android处理软键盘的可见性
- Android 处理软键盘弹出问题
- Android EditText被软键盘遮盖处理
- Android EditText被软键盘遮盖处理
- Android EditText被软键盘遮盖处理
- Adroid软键盘处理
- Android 软键盘遮挡处理和软键盘弹出与收起的监听
- android软键盘的消失事件处理方法
- 处理Android中EditText软键盘显示与隐藏
- Android 软键盘和界面的关系处理
- win7 64位下安装secureCRT 8.0和破解
- 根据两行或多列值,实时计算另一列得
- 动态规划-问题示例与解题思路(采药问题 - nefu19)
- 简单的jquery表情插件
- most powerful ZOJ3471
- Android软键盘处理
- Swift与OC中拷贝与可变性
- nyoj 10 skiing (深搜)
- kafka删除topicName 提示marked for deletion
- Eclipse内存分析工具的用法
- 读书笔记JVM探秘之五:字节码执行引擎(重载+重写原理)
- 练习英语口语的办法
- 万能适配器 listview gridview RecyclerView
- 51Nod 1009 数字1的数量(数位dp)