原始解决方案发布在

https://stackoverflow.com/a/9695482/1241783但它没有解释所以在这里我延伸了一点.

1)创建一个扩展Keyboard类的新类,该类覆盖getHeight()方法.

@Override

public int getHeight() {

return getKeyHeight() * 3;

}

注意:这里的数字3是您的总行数,如果您的键盘有5行,则输入5.

如果每行的键盘行高不同,这里你需要自己计算并返回总高度(单位是以像素为单位,花了一些时间才算出它不是dp所以需要将dp转换为像素进行所有计算) 例如:

@Override

public int getHeight() {

return row1Height + row2Height + row3Height + row4Height + row5Height;

}

2)在同一个类中创建一个新的公共函数.

public void changeKeyHeight(double height_modifier)

{

int height = 0;

for(Keyboard.Key key : getKeys()) {

key.height *= height_modifier;

key.y *= height_modifier;

height = key.height;

}

setKeyHeight(height);

getNearestKeys(0, 0); //somehow adding this fixed a weird bug where bottom row keys could not be pressed if keyboard height is too tall.. from the Keyboard source code seems like calling this will recalculate some values used in keypress detection calculation

}

如果您没有使用height_modifier而是设置为特定高度,则需要自己计算key.y位置.

如果每行的键盘行高不同,则可能需要检查键,确定它所属的行,并将高度设置为正确值,否则键将相互重叠.还将行高度存储在私有变量中,以便在上面的getHeight()中使用. PS:在某些配置上,我无法在更改键盘高度后按下底行键,我发现调用getNearestKeys()修复了虽然我不确定为什么.

注意:key.y是键的y位置,坐标0从键盘顶部开始,随着值的增加而下降.例如从键盘顶部坐标100点到100像素:)

3)最后一步是在扩展InputMethodService的主类中调用changeKeyHeight.在内部(覆盖它)onStartInputView()执行此操作,因为这是在更改高度(通过首选项或其他内容)后应重绘键盘的位置.

如果您正在查看Android软键盘示例项目,它将如下所示:

@Override public void onStartInputView(EditorInfo attribute, boolean restarting) {

super.onStartInputView(attribute, restarting);

// Change the key height here dynamically after getting your value from shared preference or something

mCurKeyboard.changeKeyHeight(1.5);

// Apply the selected keyboard to the input view.

mInputView.setKeyboard(mCurKeyboard);

mInputView.closing();

final InputMethodSubtype subtype = mInputMethodManager.getCurrentInputMethodSubtype();

mInputView.setSubtypeOnSpaceKey(subtype);

}

干杯!

额外:如果你需要一个dp到像素转换器,这里是代码:

private int convertDpToPx(int dp)

{

return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, getResources().getDisplayMetrics());

}

Android修改高度,android – 如何在运行时更改软键盘的高度?相关推荐

  1. Android 监听软键盘的高度并解决其覆盖输入框的问题

    1.前言 在某些项目中,我们常常需要自定义一个输入框,软键盘弹出时就把输入框顶上去,关闭时输入框再回到原位(比如下方的效果图,实际上各种 App 中的聊天界面和发布评论的界面大体都是这样).在这个过程 ...

  2. python运行时修改代码会怎样_python运行时修改代码的方法——monkey patch

    monkey patch (猴子补丁) 用来在运行时动态修改已有的代码,而不需要修改原始代码. 简单的monkey patch 实现: [Python] #coding=utf-8 def origi ...

  3. Android如何获取软键盘的高度

    下面代码中Log打印的displayHeight是窗口可视区域的高度,因为style设置的windowNoTitle为true,所以这个高度和通过setContentView设置的布局的可见高度是相同 ...

  4. android中监听软键盘的弹出与隐藏,并获取软键盘的高度

    最近项目中有一个需求上弹出软键盘的时候,输入框位移至输入框上方,但是Activity中其他的VIew都不动.这个需求需要监听软软键盘的弹出与隐藏,并获取键盘的高度.上网找了一下发现,Android竟然 ...

  5. Android获取软键盘的高度、键盘的打开与关闭、监听键盘处于打开还是关闭状态

    最近在项目中,需要获取到软键盘的高度,再将底部的布局上移键盘的高度,话不多说,直接上代码: 获取软键盘高度 //一个静态变量存储高度public static int keyboardHeight = ...

  6. android 更改软键盘_如何在Android的Google键盘上更改声音和振动

    android 更改软键盘 Tactile feedback from a touch screen keyboard is crucial, in my opinion, but I don't l ...

  7. Android 更改软键盘右下角按键的样式以及监听此键的方法

    一.我们在开发Android App时有时候会遇到更改软键盘右下角按键的样式 我们可以随自己的需求更改软键盘右下角的显示样式,例如:搜索,下一步,Q(搜索图标) 具体对应: actionNone : ...

  8. html 软键盘 页面高度,深入理解高度,获取屏幕、webview、软键盘高度

    如果没有手动调整过webview的高度的话,默认情况下,屏幕的高度=顶部状态栏的高度+webview的高度. 如果软键盘打开,则屏幕的高度=顶部状态栏的高度+webview的高度+软键盘的高度. HT ...

  9. 深入理解高度。获取屏幕、webview、软键盘高度

    转载地址:http://ask.dcloud.net.cn/article/205 如果没有手动调整过webview的高度的话,默认情况下,屏幕的高度=顶部状态栏的高度+webview的高度. 如果软 ...

最新文章

  1. nginx rewrite重写与防盗链配置
  2. VC中使用Unicode的一些列问题
  3. LaTeX输入极限下标,输入目标函数中的max下标约束条件
  4. Implementation of WC in JAVA
  5. Java学习优秀网站
  6. framebuffer驱动详解3——framebuffer驱动分析(driver和device的配套查找)
  7. mysql过滤效率和java过滤效率_如何合理选择初中高效过滤器的效率?
  8. RBD和AOF持久化对比
  9. 各种系统程序更新链接
  10. 基于android的团购app设计与实现,基于Android的掌上团购App设计与实现
  11. mysql基础4-数据表操作2
  12. opencv+Dlib python瘦脸代码
  13. JmeterTCP返回响应码500
  14. 【气动学】基于matlab GUI弹道仿真【含Matlab源码 1136期】
  15. windows 8.1安装VS2005出现安装失败:未能安装.NET framework 3.5解决方案
  16. Oracle pmon是什么,oracle 11g pmon工作内容系列二
  17. KVC中setValue:forKey:实现原理
  18. mysql改列名_mysql怎么修改列名
  19. 计算机中找计算器二进制转换咋找,计算器自带二进制转换器,你值得学习
  20. Reflect的理解

热门文章

  1. 抖音举办平台治理开放日 半年捣毁25个黑产团伙
  2. 微软分拆小冰业务并独立发展,沈向洋任董事长
  3. 英特尔发布年度企业社会责任报告,首次定义“全球性挑战”
  4. 中国 App 出海“变形记”
  5. LSTM 之父发文:2010-2020,我眼中的深度学习十年简史
  6. 程序猿在等电梯时都在想什么?
  7. 如何用 Python 快速抓取 Google 搜索?
  8. 刷爆了!这份被程序员疯传的 Python 神作牛在哪?
  9. 海阔凭鲲跃 天高任鹏飞——从一场大赛看华为云的鲲鹏之“智”
  10. Git 正在吞噬世界!