当 TabHost 存在于活动中时,EditText 使用硬键盘失去焦点

2024-03-03

我正在 tabhost 内显示 EditText。 Tabhost 位于 SherlockFragmentActivity 内部。

假设我处于触摸模式,我单击 EditText 以使其获得焦点并开始在其上输入内容。输入 2-3 个字符后,我决定使用硬键盘。一旦按下第一个硬键,我就会退出触摸模式,这也会导致焦点移回当前选定的选项卡。只要我不使用硬导航键将焦点带回 EditText,我就无法在 EditText 中输入内容。

仅当 TabHost 不在 TabActivity 内时才会出现此问题。

重现此问题的快速示例代码可能是 - ActionBarSherlock 示例代码的 FragmentTabs 活动。选择 CustomTab 并尝试使用硬键盘在操作栏中的搜索视图中键入任何文本。看到焦点只是移动到选项卡。

在 android 2.2、4.0 上以及使用 ICS 模拟器上也可以重现该问题。

有谁有更多信息。关于这个问题?

(这里似乎提到了一个解决方法:https://stackoverflow.com/a/8684025/333137 https://stackoverflow.com/a/8684025/333137但它看起来像一个黑客)

Thanks.

编辑:经过更多调查, 我在 TabHost 类中发现了 setup() 函数,仅当 TabHost 未在 TabActivity 中使用时才需要调用该函数。 它注册一个按键侦听器,仅在按下硬键时接收回调。

void setup(){
       // KeyListener to attach to all tabs. Detects non-navigation keys
        // and relays them to the tab content.
        mTabKeyListener = new OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                switch (keyCode) {
                    case KeyEvent.KEYCODE_DPAD_CENTER:
                    case KeyEvent.KEYCODE_DPAD_LEFT:
                    case KeyEvent.KEYCODE_DPAD_RIGHT:
                    case KeyEvent.KEYCODE_DPAD_UP:
                    case KeyEvent.KEYCODE_DPAD_DOWN:
                    case KeyEvent.KEYCODE_ENTER:
                        return false;

                }
                **mTabContent.requestFocus(View.FOCUS_FORWARD);**
                return mTabContent.dispatchKeyEvent(event);
            }

我不确定为什么它调用 requestFocus(View.FOCUS_FORWARD) 但这不会将焦点设置到其中的 EditText (它应该吗?)。此外,如果操作栏中的搜索视图,它完全位于选项卡之外。


如下重写 TabHost,它对我有用。

public class TabHostExt extends TabHost {

    public TabHostExt(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TabHostExt(Context context) {
        super(context);
    }

    @Override
    public void onTouchModeChanged(boolean isInTouchMode) {
        // leave it empty here. It looks that when you use hard keyboard,
        // this method will be called and the focus will be token.
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 TabHost 存在于活动中时,EditText 使用硬键盘失去焦点 的相关文章

  • Firebase 管理 SDK Android

    在 Android 中初始化 Firebase Admin SDK 的代码 Override protected void onCreate Bundle savedInstanceState super onCreate savedIns
  • Android 通知进度条冻结

    这是我正在使用的代码 http pastebin com 3bMCKURu http pastebin com 3bMCKURu 问题是 一段时间后 文件变得更重 通知栏下拉速度变慢 最后它就冻结了 你的通知太频繁了 这就是它冻结的原因 让
  • 使用 Android 前台服务为 MediaPlayer 创建通知

    问题就在这里 我目前正在开发一个应用程序 该应用程序必须提供 A 广播播放器 来自 URL 的 AAC 直播 还有一个播客播放器 来自 URL 的 MP3 流 该应用程序必须能够在后台运行 Android 服务 并通过以下方式向用户公开持续
  • 检测到设备正在振动?

    我使用下面的代码来振动设备 public void vibrator try Vibrator vibrator Vibrator getSystemService Context VIBRATOR SERVICE vibrator vib
  • 导航组件重复 NavArgs 的问题

    我有一个片段 class SomeFragment private val args by navArgs
  • 如何更新 Firebase 中的节点密钥?

    如何重命名14 04 2017 node 没有用于重命名节点的 API 您必须获取节点的值 使用新名称将其保存到数据库并删除旧节点
  • Android libgdx 首选项丢失

    我在 Libgdx 引擎中创建了 Android 游戏 一段时间后 我注意到在某些应用程序杀手中杀死该应用程序后 或者如果我在 Android 设置中执行 强制关闭 操作 我保存到首选项中的游戏选项就会丢失 有办法防止这种情况吗 我从来没有
  • 无法在自定义 AOSP 上安装 Google Play 中的某些应用程序:项目不可用。理由:9

    我在尝试从 Google Play 安装某些应用程序时收到以下错误 LibraryUtils isAvailable not available restriction 9 DocUtils getAvailabilityRestricti
  • 设置从 Facebook 登录获取用户电子邮件 ID 的权限

    我在用着Facebook 3 0 SDK对于安卓 我必须实施Facebook登录 我正在访问用户的基本信息 例如姓名 用户 ID 但我也想访问用户的电子邮件 我浏览了很多博客和论坛 但不知道该怎么做 我正在使用我自己的 android 按钮
  • 如果我们使用后退按钮退出,为什么 Android 应用程序会重新启动?

    按住主页按钮并返回应用程序时 应用程序不会重新启动 为什么使用后退按钮会重新启动 如果我们使用后退按钮退出 有什么方法可以解决在不重新启动的情况下获取应用程序的问题吗 请帮忙 当您按下Home按钮 应用程序将暂停并保存当前状态 最后应用程序
  • TextView 之间有分隔线

    我正在尝试在 android studio 中创建以下布局 因为我对 android 东西还很陌生 所以我第一次尝试使用 LinearLayout 并认为这可能无法实现 现在我正在尝试使用RelativeLayout 我已经用颜色创建了这个
  • Android相机意图:如何获取全尺寸照片?

    我正在使用意图来启动相机 Intent cameraIntent new Intent android provider MediaStore ACTION IMAGE CAPTURE getParent startActivityForR
  • 如何在不更改手机语言的情况下更改Android应用程序语言?

    我希望用户在应用程序内选择一种语言 选择语言后 我希望字符串使用特定语言 如果我更改手机语言 那么我的应用程序将以设置的语言运行 我无法找到任何在不更改手机语言的情况下设置语言的方法 此外 一旦设置了语言 更改就应该反映出来 有人可以建议一
  • 调节麦克风录音音量

    我们正在尝试调整录音时的音量级别 麦克风似乎非常敏感 会接收到很多静电 我们查看了 setVolumeControlStream 但找不到传入其中来控制麦克风的流 将您的音频源设置为 MIC using MediaRecorder Audi
  • Android 设备上的静默安装

    我已经接受了一段时间了 在 Android 上静默安装应用程序是不可能的 也就是说 让程序安装捆绑为 APK 的应用程序 而不提供标准操作系统安装提示并完成应用程序安装程序活动 但现在我已经拿到了 Appbrain 快速网络安装程序的副本
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • Android 如何聚焦当前位置

    您好 我有一个 Android 应用程序 可以在谷歌地图上找到您的位置 但是当我启动该应用程序时 它从非洲开始 而不是在我当前的城市 国家 位置等 我已经在developer android com上检查了信息与位置问题有关 但问题仍然存在
  • 在webview android中加载本地html文件

    我正在尝试在 android 的 webview 中加载 html 文件的内容 但是 它给了我 网页不可用错误 如果我尝试使用谷歌或雅虎等网站 它们就会起作用 html文件位于src gt main gt assests gt index
  • 如何删除因 Google Fitness API 7.5.0 添加的权限

    将我的 play services fitness api 从 7 0 0 更新到 7 5 0 后 我注意到当我将新版本上传到 PlayStore 时 它 告诉我正在添加一个新权限和 2 个新功能 我没有这样做 有没有搞错 在做了一些研究来

随机推荐

  • php 5.3 CLI 垃圾字符

    我面临的问题是 每当我从命令行运行一个简单的 php 脚本时 它前面都会显示一些垃圾字符 我在 Windows 7 上的 wamp 服务器上使用 php 5 3 9 这是我的脚本代码 这是我在 cli 中得到的 Hi 让我知道是否有其他人遇
  • 帆布滴管

    我需要实现一个吸管工具 我想要它 所以您单击吸管按钮将其激活 然后使用 onmove 它将更改我的颜色选择器的颜色 当您单击使用 onclick 时 它将使用以下方法将颜色设置为颜色选择器 colorpickerHolder ColorPi
  • 如何为 Windows 安装 libpq-dev 软件包

    我知道如何为 ubuntu 安装 libpq dev 但我查看了过去的问题 但无法找到如何为 Windows 安装该软件包 有没有地方可以下载该软件包或下载它的安装程序 我不知道 Windows 是否有一个 包 但你可以在这里下载 post
  • 在pyspark中按行连接字符串

    我有一个 pyspark 数据框 DOCTOR PATIENT JOHN SAM JOHN PETER JOHN ROBIN BEN ROSE BEN GRAY 并且需要按行连接患者姓名 以便得到如下输出 DOCTOR PATIENT JO
  • 模糊 MAAttachedWindow 后面的背景?

    只是好奇这是否可能 现在这是一个示例MAAttachedWindow http mattgemmell com 2007 10 03 maattachedwindow nswindow subclass好像 不过我想知道是否可以模糊背景be
  • Rails 3 在“lib”目录中看不到我的类

    我已放置文件rack app rb与简单的机架应用程序lib目录 class RackApp def call env 200 Hello end end 然后我添加了这条路线 match rack gt RackApp 当我尝试启动 Ra
  • 从 PDF 文件中提取文本数据

    是否可以在 R 中解析 PDF 文件中的文本数据 那里似乎不是此类提取的相关包 http crantastic org search q parse pdf 但是有人尝试过或见过 R 中这样做吗 In Python中有PDFMiner ht
  • 如何查明 Prolog 是否执行尾调用优化

    使用SWI Prolog Win x64 的开发版本 我为 a 编写了一个 DCG 谓词确定性词法分析器 托管在 github 上 https github com sebgod goldparser prolog 因此所有外部谓词都没有留
  • 在 Perl 中获取按修改日期排序的文件列表

    我正在尝试获取按修改日期排序的文件列表 我修改了示例程序根据日期和时间对目录进行排序并列出文件 http forums devshed com perl programming 6 sort directory and list files
  • 使用loopj Android异步Http客户端同步调用

    在一种情况下 我尝试在 Loopj 上使用 setUseSynchronousMode 来等待 http 调用的结果 然后再继续 我试过 AsyncHttpResponseHandler responseHandler new AsyncH
  • 如何尽可能快地生成此 switch 语句?

    2009 12 04 更新 有关此处发布的一些建议的分析结果 请参见下文 问题 考虑以下非常无害 非常简单的方法 它使用switch返回定义的枚举值的语句 public static MarketDataExchange GetMarket
  • 单元测试项目中的连接字符串到 app_data 文件夹中的引用数据库

    我希望在单元测试项目中引用我的数据库文件 这是一个 ASP NET MVC 应用程序 请注意 我知道我不应该在单元测试中访问数据库 但这是为了快速修复我现在需要通过的一项测试 在下一个里程碑之后 我将嘲笑数据库访问方法等 这是我的 mvc
  • 在 Groovy 1.7 中使用具有混合内容的 HTML 构建器的正确语法是什么?

    On the Groovy 示例页面 https web archive org web 20100712132418 http groovy codehaus org Builders有一个示例说明如何使用具有混合内容的 Groovy H
  • Android:使用自定义键盘编辑文本

    我按照 sdk 中的示例创建了自己的自定义键盘 现在我想在我的应用程序中的 EditText 上默认使用这个自定义键盘 实际上我必须长按 edittext 然后选择我的custom keyboard 我怎样才能做到这一点 似乎与 input
  • 猜测无界整数

    如果我对你说 我正在想一个0到n之间的数字 我会告诉你你的猜测是高还是低 然后你会立即进行二分查找 如果我删除上限怎么办 即我正在考虑一个正整数 你需要猜测它 一种可能的方法是让您猜测 2 4 8 直到您对某些 k 猜测 2 k 并且我说
  • Pod 无法安装软件包(apt-get update 或 apt-get install )

    我发现集群中的 pod 在 exec 到 pod 时无法安装软件包 在调试时我意识到这是由于 etc resolv conf entries The etc resolv conf 其中一个 Pod 的条目是 nameserver 192
  • XMPP 带有支持 X-FACEBOOK-PLATFORM 的 Java Asmack 库

    我正在尝试使用 Smack 库在 Android 上进行 Facebook 聊天 我读过Chat API http developers facebook com docs chat 来自 Facebook 但我不明白如何使用这个库向 Fa
  • 对部分排序的数组进行排序

    我正在尝试对具有以下属性的数组进行排序 它增加到一定程度然后开始减少 然后增加然后减少等等 是否有任何算法可以通过利用部分排序来以低于 nlog n 的复杂度对其进行排序 数组示例 14 19 34 56 36 22 20 7 45 56
  • Python 求和字典列表中元组中的值?

    在我的字典中 每个条目都有一个元组列表 我的python语法可能是错误的 请耐心等待 它看起来像这样 1 2 2 4 3 6 1 7 1 8 3 2 4 1 5 3 1 2 我想对每个条目的元组中的第二个值求和 即 1 10 2 5 我一直
  • 当 TabHost 存在于活动中时,EditText 使用硬键盘失去焦点

    我正在 tabhost 内显示 EditText Tabhost 位于 SherlockFragmentActivity 内部 假设我处于触摸模式 我单击 EditText 以使其获得焦点并开始在其上输入内容 输入 2 3 个字符后 我决定