全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android 弹出软键盘所遇到的坑及解决方法

demo下载

重要代码:

//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,如下:

 <!--此view用于获取焦点,当软件盘弹出时,根据此view来弹出,而此view在最顶部,且大小为0,所以软件盘弹出,不会把背景顶上去-->
  <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 弹出软键盘所遇到的坑及解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# android  # 弹出软键盘  # Android屏蔽软键盘自动弹出的解决方案  # Android判断软键盘弹出并隐藏的简单完美解决方法(推荐)  # android避免弹出软键盘遮盖listview的简单方法  # Android软键盘弹出时的界面控制方法  # Android WebView无法弹出软键盘的原因及解决办法  # 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法  # 输入框  # 弹出  # 全屏  # 最外层  # 小编  # 顶上去  # 就会  # 那就  # 在此  # 才会  # 给大家  # 可以实现  # 会把  # 我们应该  # 解决方法  # 所述  # 给我留言  # 感谢大家  # 疑问请  # 有任何 


相关文章: 东莞专业制作网站的公司,东莞大学生网的网址是什么?  如何用wdcp快速搭建高效网站?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  音响网站制作视频教程,隆霸音响官方网站?  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  网站制作网站,深圳做网站哪家比较好?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  营销式网站制作方案,销售哪个网站招聘效果最好?  表情包在线制作网站免费,表情包怎么弄?  建站主机是否等同于虚拟主机?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  如何在景安云服务器上绑定域名并配置虚拟主机?  电商网站制作公司有哪些,1688网是什么意思?  如何高效利用亚马逊云主机搭建企业网站?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  建站之星如何通过成品分离优化网站效率?  如何用狗爹虚拟主机快速搭建网站?  seo网站制作优化,网站SEO优化步骤有哪些?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  如何在宝塔面板中修改默认建站目录?  建站org新手必看:2024最新搭建流程与模板选择技巧  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  建站之家VIP精选网站模板与SEO优化教程整合指南  建站之星CMS建站配置指南:模板选择与SEO优化技巧  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  西安大型网站制作公司,西安招聘网站最好的是哪个?  如何生成腾讯云建站专用兑换码?  MySQL查询结果复制到新表的方法(更新、插入)  建站主机服务器选型指南与性能优化方案解析  建站之星logo尺寸如何设置最合适?  相册网站制作软件,图片上的网址怎么复制?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站主机默认首页配置指南:核心功能与访问路径优化  公司网站制作费用多少,为公司建立一个网站需要哪些费用?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  b2c电商网站制作流程,b2c水平综合的电商平台?  建站OpenVZ教程与优化策略:配置指南与性能提升  网站制作公司,橙子建站是合法的吗?  C#怎么创建控制台应用 C# Console App项目创建方法  建站主机核心功能解析:服务器选择与网站搭建流程指南  如何在阿里云部署织梦网站?  定制建站如何定义?其核心优势是什么?  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何获取开源自助建站系统免费下载链接?  如何在云主机上快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。