我们正在开发我们的第一个Android应用程序,到目前为止它是一个非常愉快的体验.它几乎完成,但在发布之前我们有一些考虑因素,主要是关于android软键盘.
我们有几个用于输入数字的 EditText字段.我们希望在用户按下Enter键时捕获事件,并进行一些计算并保存此回调.
问题是我们没有得到固定的事件,因为不同的手机有不同的键盘.有些人有"完成"按钮,我们的HTC手机有"进入"按钮.我们尝试将imeOptions用作'完成',但这对HTC手机没有影响.
我们也知道可以通过按下后退按钮来解除键盘.所以我的问题是,是否有一种可靠的方法可以知道用户何时停止输入或何时隐藏键盘,就像在iphone sdk中的textFieldShouldReturn回调一样(当键盘发生故障时它总是会触发,而不管是什么键导致它去了下)..
换句话说,Android开发人员如何处理软键盘?我在editText onClick()事件上检查KeyEvent.KEYCODE_ENTER并在那里完成我的任务.它正在我的HTC android上工作,但不是我的朋友Nexus手机,它有一个完成按钮而不是输入.甚至没有调用onClick.开发人员如何处理此问题?
编辑:失去了一半的头发,并在这里的一些好朋友的帮助下
我已经尝试了所有的建议,但最后通过使用onEditorActionListener和onKeyListener方法为我做了诀窍.在OnEditorActionListener的onEdit回调中,我检查了KeyCode ACTION_DONE,它确实在带有完成按钮的键盘上调用.在输入onKey的键盘上被调用.在onKey方法中我也检查了KEYCODE_BACK,因此也可以处理硬件反压事件.我还没有找到一个完成的Android设备并且在键盘上输入(严重),我甚至用标志处理了这个案例.感谢@Femi建议onEditorActionListener,感谢所有朋友的帮助.但是我原来问题的答案
问:有没有一种可靠而简单的方法来了解android软键盘辞职(适用于每部手机的回调)
答:不,这里建议的所有方法和其他网站上建议的所有方法都不简单.我认为处理键盘返回键事件是任何操作系统最基本的事情.谷歌,你呢?
我正在使用Droid Incredible进行开发(并且已经在1.5 AVD仿真器上进行了测试),我的选项卡小部件中的一个选项卡包含一个列表视图和一个带有EditText和一个发送按钮的行(用于聊天功能) .单击"发送"后,我将使用以下内容关闭软键盘,但它无法正常工作.这与我在其他地方发现的代码完全相同.
看到我错过的任何东西?
// in Button's onClick():
EditText chatTextBox = (EditText) findViewById(R.id.chat_entry);
// Handle button click ...
chatTextBox.setText("");
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(chatTextBox.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);
Run Code Online (Sandbox Code Playgroud)
我也尝试将旗帜改为0.没有运气.谁知道怎么了?
****编辑****刚刚意识到我最初使用的是hideSoftInputFromInputMethod()代替hideSoftInputFromWindow().改变它并没有使它工作,但......
我们正在使用Phonegap来开发我们的移动应用程序,我们从这里借用代码从键盘中删除黑色的next/prev/done栏:
该代码的作用是找到黑条,作为UIView对象,并在其上调用'removeFromSuperview'.
我们不熟悉iOS SDK/API.因此,虽然我们可以查看代码并了解它正在做什么,但我们无法确定它是否正确执行,或者如何改进它.
我们遇到的具体问题:
我们有一个用于编写消息的文本字段,我们手动控制此字段的位置正好位于键盘上方,类似于本机短信应用程序.换句话说,我们把它放在应该是黑条的地方.
当我们关注/键入消息字段时,系统会向上推动视图.看起来这是一种机制,可确保文本字段在用户输入时不可见.
这是发生即使文本字段是可见的.
我注意到,通过将输入字段放在黑色条通常位于正上方的位置(与其背后相对),视图不会滚动.
所以系统似乎认为黑条仍在那里!
(要仔细检查:当黑色条未被移除时,我们将文本字段放在它上方,我们可以对焦并输入它,并且视图不会滚动).
所以问题是:
为什么"系统"会在编辑一个文本字段时推送内容,该文本字段位于黑色条应该位于"后面"的位置?是因为黑条还没有被完全移除吗?我们需要做些什么来"完全"去除黑条吗?我们是否需要强制iOS重新计算键盘的大小?或究竟是什么?
这个机制(推高视图)是由iOS的UIWebView或Phonegap实现的吗?
有没有解决这个问题的phonegap应用程序?
我隐藏了软键盘,因为我在应用程序上有自定义键盘.单击edittext时,不应弹出软键盘.所以,我从源头上尝试了很多方法,但没有任何方法可行editText.setFocusable(false);.但是现在问题是当我点击它时甚至没有突出显示的是edittext没有突出显示.我已经尝试过使用InputManager,android:windowSoftInputMode="stateAlwaysHidden在清单中引用了很多像链接1,链接2等,但这些技术至少甚至都没有隐藏我的应用程序上的软键盘.最后我通过setFocusable得到了这个,但是有一个突出显示问题和光标不可见的问题,甚至requestFocus()在onClickListener中也没有用.有人能为这个问题提供准确的解决方案吗 代码片段表示赞赏.
我有一个非常讨厌的问题.在Android中制作注册表单,当EditText获得焦点时,键盘出现.但它真的很慢.即使在高端设备上也需要5秒或更长时间.
我们的应用程序使用多个层次的碎片.所以我想可能计算所有这些层向上滑动(当键盘出现时)需要这么长时间.当我在清单文件中设置"adjustNothing"时,键盘会快速显示,而在另一个我们只有一层片段的活动中(这一层是注册表单),它也会很快出现.
有人有类似的问题或建议吗?(隐藏或删除注册下方的片段不是一种选择)
keyboard android soft-keyboard android-softkeyboard android-fragments
我在引号中加上"回归错误"这个词,因为这显然有一些不一致的意见.有关详细信息,请访问Bugzilla中的Bug 24796.
简而言之,Google Chrome根据最新版本的WhatWG规范实施了更改:http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type- attr-summary从字段
中删除了以下属性和方法<input type="number"/>.
属性:
方法:
(还有其他但这些是常用的关键)
如果您检查HTMLInputElement尝试调用方法的"数字"实例或请求属性将引发异常,则定义方法.:-(
恕我直言这是一个错误(因为功能已被删除,没有任何收获......并且有1,000个网站/应用程序通过JavaScript为这些数字输入字段提供扩展行为......但我离题了(对于那些希望要解决它请使用上面列出的bug帖子))
TL; DR
出于可用性目的,我当然希望并计划继续使用<input type="number"/>字段,因为它们向用户代理提供"提示",如果在移动设备(智能手机/平板电脑/?)上,我希望在字段为时显示数字键盘专注于默认的alpha键盘.
但是对于当前版本的Chrome(版本33.0.1750.146)和盲目实现此规范更改的任何其他浏览器,我想安全地将渲染字段转换回
<input type="text"/>
笔记:
我有一个EditText活动,我只需要输入数字.
现在,我已经将EditText的输入类型定义为仅限数字,并为我的用户绘制了一个漂亮的键盘,但是我还需要确保在用户点击时不会弹出软键盘EditText.
我试图通过添加隐藏键盘通过清单
android:windowSoftInputMode="stateAlwaysHidden"
Run Code Online (Sandbox Code Playgroud)
在我的Manifest中针对特定活动,但这对我不起作用,因为只要用户点击EditText,键盘就会再次出现.
我尝试过以编程方式执行相同操作
activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Run Code Online (Sandbox Code Playgroud)
但这也不起作用.用户单击EditText时会出现键盘.
唯一有效的方法是将EditType的InputType设置为null,如下所示:
EditText.setInputType(InputType.TYPE_NULL);
Run Code Online (Sandbox Code Playgroud)
但我不能使用它,因为它允许键盘连接到他们设备的用户在EditText字段中输入字母和其他符号,而我希望每个人都专门使用键盘在字段中输入数据.
我还应该提一下,我目前正在Android 2.1下测试我的应用程序,但我希望我的解决方案适用于所有版本.任何帮助,将不胜感激.提前致谢.
我正在申请一份包含注册表格的申请表.表单包含多个文本输入框,因此ScrollViewer用于允许它们全部显示在一个页面上.
以下是我正在使用的XAML代码的精简示例:
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="SCROLLVIEWER TEST" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="registration" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<ScrollViewer Grid.Row="1">
<StackPanel>
<TextBlock Text="Hello" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello1" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello2" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello3" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello4" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello5" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello6" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello7" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="Hello8" Margin="12,0,0,0"/>
<TextBox />
<TextBlock Text="END" Margin="12,0,0,0"/>
<TextBox …Run Code Online (Sandbox Code Playgroud) 这个问题是关于iOS web dev.
我有一个由"搜索"输入字段中的键盘监听器触发的函数.它适用于台式机,笔记本电脑,三星Galaxy手机和索尼Xperia,但不适用于iPhone或iPad.只要该功能运行,软键盘就会关闭.我想到的一个可能的解决方案是focus将输入重新id='newsearch'作为函数的最后一行,但这似乎没有做任何事情.
有没有人知道如何在ios中运行该功能时保持键盘打开?
请参阅以下3个代码段:
触发该功能的行:
<tr><td colspan='3'>Search <input type='text' autofocus id='newsearch'></input></td>
<h2>Search Results</h2>
<div id="newsearch-data"> </div>
<script src="http://code.jquery.com/jquery-1.8.0.min.js"> </script>
<script src="addplayer.js"> </script>
Run Code Online (Sandbox Code Playgroud)
函数本身: addplayer.js
$('input#newsearch').on('keyup', function(){
var newsearch = $('input#newsearch').val();
if ($.trim(newsearch)!= "") {
$.post('newsearch.php', {newsearch: newsearch}, function(data) {
$('div#newsearch-data').html(data);
});
}
});
document.getElementById("newsearch").focus();
Run Code Online (Sandbox Code Playgroud)
函数引用的php文件: newsearch.php
if (isset($_POST['newsearch']) && $_POST['newsearch'] != NULL){
require 'dbconnect.php';
$term = $_POST['newsearch'];
$terms = "%" . $term . "%";
$_SESSION['players'] = array();
$query = ("SELECT * FROM players WHERE …Run Code Online (Sandbox Code Playgroud) 使用我的应用主题,我使用此属性显示彩色导航栏(屏幕底部带有后退按钮的导航栏)
<item name="android:navigationBarColor">@color/theme_color</item>
Run Code Online (Sandbox Code Playgroud)
当软键盘出现时,颜色变为黑色.我想保留我的主题颜色.
android soft-keyboard navigationbar android-theme android-styles
soft-keyboard ×10
android ×6
hide ×2
iphone ×2
javascript ×2
keyboard ×2
cordova ×1
enter ×1
events ×1
html-input ×1
ios ×1
objective-c ×1
scrollviewer ×1
w3c ×1