隐藏用于 editText 焦点/触摸的软键盘

2024-01-09

我试图隐藏软键盘,使其在 EditText 接收焦点或触摸事件时不显示。我希望 EditText 是可编辑的 - EditText 中会有文本,因此我希望 EditText 响应触摸事件,以便定位光标,但我将有专用的编辑按钮,而不是使用软键盘。我无法让它工作 - 软键盘似乎会在 focuschange 和触摸事件上弹出。

我已将代码简化为以下内容:

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="App1.App1" android:versionCode="1" android:versionName="1.0">
    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="21" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <application android:label="App1">
        <meta-data android:name="com.google.android.gms.version" 
               android:value="@integer/google_play_services_version" />
        <activity android:name="com.google.android.gms.ads.AdActivity" 
              android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" 
              android:theme="@android:style/Theme.Translucent" 
              android:windowSoftInputMode="stateAlwaysHidden" />
    </application>
</manifest> 

主要.axml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/layout"
    android:descendantFocusability="beforeDescendants"
    android:focusableInTouchMode="true">

  <EditText xmlns:tools="http://schemas.android.com/tools"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:id="@+id/editText" />

  <com.google.android.gms.ads.AdView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/adView"
    ads:adSize="SMART_BANNER"
    ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
  </com.google.android.gms.ads.AdView>

</LinearLayout>

MainActivity.cs:

namespace App1
{
    [Activity(Label = "App1", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            SetContentView(Resource.Layout.Main);

            LinearLayout layout = FindViewById<LinearLayout>(Resource.Id.layout);
            layout.FocusChange += FocusChange;

            EditText editText = FindViewById<EditText>(Resource.Id.editText);
            editText.FocusChange += FocusChange;
            editText.Touch += Touch;

            AdView adView = FindViewById<AdView>(Resource.Id.adView);
            var requestbuilder = new AdRequest.Builder();
            adView.LoadAd(requestbuilder.Build());
        }


        protected override void OnResume()
        {
            base.OnResume();

            AdView adView = FindViewById<AdView>(Resource.Id.adView);
            if (adView != null)
                adView.Resume();
        }


        private void FocusChange(object sender, View.FocusChangeEventArgs e)
        {
            InputMethodManager im = (InputMethodManager)GetSystemService(Context.InputMethodService);
            im.HideSoftInputFromWindow(Window.DecorView.WindowToken, Android.Views.InputMethods.HideSoftInputFlags.None);

            LinearLayout layout = FindViewById<LinearLayout>(Resource.Id.layout);
            im.HideSoftInputFromWindow(layout.WindowToken, Android.Views.InputMethods.HideSoftInputFlags.None);

            EditText editText = FindViewById<EditText>(Resource.Id.editText);
            im.HideSoftInputFromWindow(editText.WindowToken, Android.Views.InputMethods.HideSoftInputFlags.None);
        }



        private void Touch(object sender, View.TouchEventArgs e)
        {
            InputMethodManager im = (InputMethodManager)GetSystemService(Context.InputMethodService);
            im.HideSoftInputFromWindow(Window.DecorView.WindowToken, Android.Views.InputMethods.HideSoftInputFlags.None);

            LinearLayout layout = FindViewById<LinearLayout>(Resource.Id.layout);
            im.HideSoftInputFromWindow(layout.WindowToken, Android.Views.InputMethods.HideSoftInputFlags.None);

            EditText editText = FindViewById<EditText>(Resource.Id.editText);
            im.HideSoftInputFromWindow(editText.WindowToken, Android.Views.InputMethods.HideSoftInputFlags.None);

            (sender as EditText).OnTouchEvent(e.Event);
        }
    }
}

我尝试过许多 stackoverflow 答案的变体来隐藏键盘,但没有任何效果。任何帮助,将不胜感激。


我最终得到了一个棘手的解决方案,它有效,但我不喜欢它。

我有一个简单的布局EditText and a Button。当您按下按钮时,我会在后面添加一个“*”EditText光标是。您可以用手指操纵光标,并且软键盘永远不会打开,因为当 EditText 获得焦点时我隐藏键盘.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText  android:id="@+id/myEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Text Here"/>
    <Button
        android:id="@+id/myButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Click Me!" />
</LinearLayout>

和代码中Activity:

public class MainActivity : Activity, View.IOnTouchListener
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.Main);

        EditText edt = FindViewById<EditText>(Resource.Id.myEditText);
        edt.SetOnTouchListener(this);

        Button button = FindViewById<Button>(Resource.Id.myButton);
        button.Click += delegate { edt.Text = edt.Text.Insert(edt.SelectionStart, "*"); };
    }

    public bool OnTouch(View v, MotionEvent e)
    {
        // Pass the event to the edit text to have the blinking cursor.
        v.OnTouchEvent(e);
        // Hide the input.
        var imm = ((InputMethodManager)v.Context.GetSystemService(Context.InputMethodService));
        imm?.HideSoftInputFromWindow(v.WindowToken, HideSoftInputFlags.None);
        return true;
    }
}

最后结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

隐藏用于 editText 焦点/触摸的软键盘 的相关文章

  • 如何修复Android模拟器中“无法连接到相机服务”异常

    当我在模拟器中运行 Android 应用程序时 出现无法连接到相机服务异常 我已经阅读了各种现有的帖子 但没有一个修复了这个问题 显然是 Camera open 调用失败了 我最终想让网络摄像头在模拟器中运行 正如许多 SO 帖子所讨论的那
  • 计算序列而无法存储值?

    问题陈述 here http www spoj com problems EC SER 令 S 为无限整数序列 S0 a S1 b Si Si 2 Si 1 对于所有 i gt 2 你有两个整数 a 和 b 您必须回答有关序列中第 n 个元
  • 如何使用 LINQ 对列表的列表进行分组(例如:List>)

    我知道我可以使用一些 for 循环轻松地做到这一点 但想看看是否有一种方法可以使用流畅的 LINQ 来做到这一点 我试图找出每个子列表中有多少个 我在看Enumerable SequenceEqual http msdn microsoft
  • 为并行的小型已知冻结进程创建匿名 AsyncTask 是一个好习惯吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 例如 您要做一些需要几秒钟的事情 并且不想冻结您的 UI 线程 对吗 您可以使用 AsyncTask 但您不想创建外部 或内部 类来解决小冻结问
  • 多少次函数调用会导致堆栈溢出

    你好 Android Java 开发者 当一个函数调用一个函数并且该函数调用另一个函数等等时 有多少次调用 堆栈长度 会让我陷入堆栈溢出 有一般经验法则吗 我问的原因是因为我现在对于我的 5 人纸牌游戏来说哪个更有效 设计明智 解决方案一
  • Visual Studio:同时调试多个项目?

    是否可以在 Visual Studio 中同时调试多个项目 我知道您可以从解决方案属性中选择多个启动项目 但是断点是如何处理的 如果两个项目使用同一个类 它的两个不同实例 并且我因其中的断点而停止 那么它只会阻止一个程序还是同时阻止两个程序
  • 如何在提升日期时间中忽略周末和节假日?

    第一个问题 我有一个提升日期对象 如下所示 boost gregorian date 今天 2012 02 13 我从今天减去日期部分 如下所示 今天 月 240 或今天 天 X 等 我想在进行上述减法时是否有办法排除周末和特殊假期 我的意
  • Android 基础知识:在 UI 线程中运行代码

    从在 UI 线程中运行代码的角度来看 以下两者之间有什么区别 MainActivity this runOnUiThread new Runnable public void run Log d UI thread I am the UI
  • DirectX Vertex 中的 THE 是什么

    我知道 RHW 是倒数同质 W 但有人可以解释一下它的使用方法和作用吗 gamedev论坛上的说明post http www gamedev net topic 440283 reciprocal of homogeneous w and
  • 将 boost::iostreams::mapped_file_source 与 std::multimap 一起使用

    我有相当大量的数据需要分析 每个文件大约有 5gig 每个文件的格式如下 xxxxx yyyyy 键和值都可以重复 但键是按升序排列的 我正在尝试使用内存映射文件来实现此目的 然后找到所需的键并使用它们 这是我写的 if data file
  • 在.NET MVC中,有没有一种简单的方法来检查我是否在主页上?

    如果用户从主页登录 我需要采取特定的操作 在我的 LogOnModel 中 我有一个隐藏字段 Html Hidden returnUrl Request Url AbsoluteUri 在我的控制器中 我需要检查该值是否是主页 在下面的示例
  • 传输数据的 Symbol.WPAN.Bluetooth 示例

    我正在尝试将 EMDK 附带的 Symbol WPAN Bluetooth 用于 Symbol 设备 有人碰巧有一个传输数据的工作示例吗 Symbol 的示例只是将设备配对 他们显然认为在个人局域网示例中并不真正需要传输数据 不管怎样 我知
  • 注意通知持续时间

    是否可以将抬头通知的持续时间设置为无限 现在它只显示 5 秒 已经尝试过不同的事情 例如更改类别 但持续时间始终为 5 秒 这是我的代码 Notification notification notificationBuilder setCa
  • 如何添加不确定的进度条

    我的应用程序 UI 是使用 Android 支持库构建的 但目前没有我的应用程序真正需要的 不确定的 进度条的 AppCompat 版本 我宁愿不使用任何第三方库来实现材料设计进度条 所以我想知道是否有人坐在有关为什么它不包含在支持库中的信
  • C# 从字符串变量中获取类型并在泛型方法中使用它

    我希望能够通过某种方式 即从数据库 获取我收到的字符串值的实际类型 这样我就可以在通用方法中使用该类型 例如DoSomething
  • 错误:找不到 com.google.firebase.storage.UploadTask.TaskSnapshot 类型的符号方法 getDownloadUrl()

    在 gradle update 之前一切正常 但后来弹出了这个错误 我参考了官方文档 它提供了相同的代码 不接受 getDownloadUrl 方法 https i stack imgur com YLC2x png 我已经添加了最新的正确
  • MSVC如何在编译期间输出一些内容到“输出”窗口

    有时我看到某些项目在编译期间向输出写入一些内容 在MSVC 中如何实现 thanks use pragma message e g define MESSAGE t message FILE STRINGXXX LINE t define
  • 是否可以在 ASP.NET Web API 和 SPA 中使用基于 cookie 的身份验证?

    我想创建基于 angularjs 前端和 ASP NET Web API 的 Web 应用程序 我需要创建安全 api 但我无法在将实施此 Web 应用程序的公司服务器上使用基于令牌的身份验证 是否可以对 SPA 和 ASP NET Web
  • 我的 Visual Studio 2008 模板有什么问题?

    我正在尝试为 Visual Studio 创建自己的类模板 称为 公共类 我跟着有关如何手动创建项目模板的官方 MSDN 说明 http msdn microsoft com en us library ms247113 aspx几乎一字不
  • (int *)0 是空指针吗?

    这可以被认为是一个扩展这个问题 https stackoverflow com q 16563114 912144 我只对 C 感兴趣 但添加 C 来完成扩展 C11 标准 6 3 2 3 3 规定 值为 0 的整数常量表达式 或此类表达式

随机推荐

  • 根据角度和距离求出Y点

    在我的项目中 我想从 X 点到 Y 点画一条线 虽然我知道 X 点的位置 但我只知道 Y 点的角度和距离 所以我的问题是通过角度 距X点 和距离得到Y点的坐标 我在这个项目中使用 JavaScript 并且不想使用任何图形库 例如 X 点
  • AppEngine/Go:将新版本的 Go 与 SDK 结合使用

    目前 Go SDK 附带的 Go 版本是 1 6 2 但最新版本是 1 7 1 我需要一些自 1 6 2 以来发布的增强功能 错误修复 但是 当我更换goroot在 SDK 目录中包含 Go 1 6 2 且符号链接指向 1 7 1 的目录中
  • 使用 Promise.all 解决获取请求

    我有一个包含 4 个请求对象的数组 我想在它们上使用 Fetch API 并获取承诺 然后我想解决每一个承诺并取回价值 这是我构建请求对象的方法 let requestsArray urlArray map url gt let reque
  • jQuery 动画 - 什么时候是异步的,什么时候不是?

    我有两个要设置动画的 div div div div div 我在 jQuery 中调用 animate 如下所示 sprite animate width 1 400 character animate width 1 400 chara
  • 在 pandas 中使用 groupby 过滤数据

    我有一个 DataFrame 其中包含以下数据 每行代表电视剧每集中出现的一个单词 如果一个单词在一个剧集中出现 3 次 则 pandas 数据框有 3 行 现在我需要过滤一个单词列表 这样我应该只得到出现超过或等于 2 次的单词 我可以通
  • 捕获单个任务中的异常并重新启动它们

    如果我创建一系列asyncio顶级类中的任务 所有这些任务基本上都应该永远运行 如下所示 asyncio create task asyncio create task asyncio create task self event loop
  • UICollectionView 单元格不可见

    我最近在我的故事板中添加了一个 UICollectionView 它目前被另一个视图推入视图 这似乎工作正常 但是 使用故事板编辑器 我将视图设置为包含 35 个单元格 这些单元格在编辑器中看起来很好 但是当我运行应用程序中的单元格是不可见
  • 使用azure数据工厂更新Azure机器学习模型

    当我使用数据工厂更新 Azure ML 模型时 如文档所述 https learn microsoft com en us azure data factory v1 data factory azure ml update resourc
  • 如何使用 C++ 更改/设置 DNS?

    我正在尝试使用 C 更改 设置 DNS 目前我无法找到这方面的任何资源 public static NetworkInterface GetActiveEthernetOrWifiNetworkInterface var Nic Netwo
  • 使用 SQL 编辑 XML 列。不那么结构化的 XML

    这个问题是一个这个问题的后续 https stackoverflow com q 40080985 5089204 如何通过获取 的新标签来编辑 XMLXXX 不是那么结构化的 xml 需要帮助 我对 XML 和 XQuery 非常陌生 如
  • 与 C# 和 VBA 的并行 COM 互操作

    我不是在谈论从 C 调用 VBA COM 相反 我想做的是在 MS Access 中使用 VBA 调用 C 库 而不注册 DLL 我已经玩了一段时间的并行互操作 但没有成功 我终于意识到 mdb manifest 可能不是 exe mani
  • 自动使基构造函数在派生类中可用?

    我有一个带有两个构造函数的基类 需要一个参数 public abstract class StoreBase private readonly SomeObject sobj protected StoreBase SomeObject s
  • 您重构代码的方式和频率如何?

    我的问题模糊地涉及this one https stackoverflow com questions 140677 how often should you refactor 但是 它不涉及技术或实践 我在读务实的程序员并且它强烈提倡尽可
  • 将大型 JS blob 传递给 Blazor byte[]

    我需要使用录制一些音频 甚至视频媒体API https developer mozilla org en US docs Web API MediaRecorder in JS example https mbuotidem github
  • 在生产中部署 Spring Boot

    我们有一个 Spring Boot Angular 应用程序 目前我们正在将其打包为 jar 并运行它 可以将包装用作 JAR 吗 或者我们应该转向 WAR 类型的包装 会有什么不同呢 除了部署方式之外 没有其他区别 使用 JAR 时 Sp
  • GridX启动后如何重新计算列宽?

    根据文档 https github com oria gridx wiki Create the Simplest Gridx https github com oria gridx wiki Create the Simplest Gri
  • SVG animateTransform 平移和缩放同时失败

    我有一条想要使用的动画路径animateTransform 我想同时平移和缩放路径 这不起作用 显然只有第二个动画起作用 在这种情况下scale 我究竟做错了什么 svg width 300px border 1px solid fill
  • 在ubuntu Linux服务器上通过命令行运行php文件

    我试图在 ubuntu Linux 服务器上运行 php 文件 但当我运行 php file name php 时出现 找不到命令 错误 在网上搜索时 我发现一篇文章建议我运行 sudo aptitude install php5 cli
  • InterfaceBuilder NSButton 连接到 NSViewController 原因“无法连接操作,目标类 NSObject 不响应”

    我有一个基于视图的NSTableView其 文件的所有者 是ViewController 我在自定义上拖动了一个按钮 用于删除 NSTableCellView 所以我想单击按钮并从 tableView 中删除当前行 但是当添加行时调试控制台
  • 隐藏用于 editText 焦点/触摸的软键盘

    我试图隐藏软键盘 使其在 EditText 接收焦点或触摸事件时不显示 我希望 EditText 是可编辑的 EditText 中会有文本 因此我希望 EditText 响应触摸事件 以便定位光标 但我将有专用的编辑按钮 而不是使用软键盘