如何在Android中获得虚拟键盘的高度?可能吗?
我尝试从主窗口获取它,但它给了我完整的应用程序高度.但我想获得键盘高度.
因为你在WebView上调用javascript的方式是通过loadUrl("javascript:..."); 键盘不能保持打开状态.
在使用loadURL()方法调用loadUrlImpl() ,它调用一个方法叫做clearHelpers() ,然后调用clearTextEntry() ,然后调用hideSoftKeyboard(),然后我们哦变得如此寂寞键盘消失.
据我所知,所有这些都是私人的,不能被覆盖.
有人找到了解决方法吗?有没有办法强制键盘保持打开或直接调用javascript而不通过loadUrl()?
反正是否以某种方式覆盖WebView以防止(私有方法)clearTextEntry()被调用?
我正在Android应用程序中创建一个搜索选项.
在屏幕键盘上按"搜索"后,会触发一个事件,将查询发送到服务器.我想要做的是当没有输入相应的文字时,禁用屏幕键盘上的"搜索"按钮EditText.
我把它添加到EditText:
android:imeOptions="actionSearch"
这就是为什么键盘有一个"搜索"按钮而不是默认的"输入"/"完成".(以防万一你想知道).
我正在构建一个使用特定键盘的自定义应用程序,因此当用户运行应用程序时,默认键盘应该更改为我的特定键盘,其名称是黑客键盘,如何使用java代码或从java代码调用adb命令,我的设备已根植,再次这是特定的应用程序和我开发的公司要求.
在我的应用程序中,我有一个带有页脚的ListView,其中包含一个带有EditText的自定义视图.顶部有一个动作栏.当前活动使用SOFT_INPUT_ADJUST_RESIZE(adjustResize)作为软输入模式,并且在滚动时不关闭键盘.
为了显示更多列表,我想在滚动时移除键盘并获得更平滑的滚动行为,我想要更改以便使用SOFT_INPUT_ADJUST_PAN(adjustPan).但是,如果我改为adjustPan,则整个视图(包括操作栏)会被推高.我希望列表视图被推送,但操作栏始终保持在顶部.这可能吗?如果没有,是否可以使用adjustResize并获得平滑的调整大小动画?
到目前为止,我尝试过:
Window.FEATURE_ACTION_BAR_OVERLAY,但这没有帮助,虽然文档听起来很有希望.adjustResize,由于滚动时发生的绘图行为,最小化键盘并同时调整列表视图的大小,我已排除了这一点.有没有办法制作流畅的动画调整大小?android android-layout android-softkeyboard android-windowmanager android-actionbar
当用户按下软键盘上的"完成"时,键盘将关闭.我希望它只有在某个条件为真时才关闭(例如,密码输入正确).
这是我的代码(为按下"完成"按钮时设置一个监听器):
final EditText et = (EditText)findViewById(R.id.et);
et.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
if(actionId==EditorInfo.IME_ACTION_DONE)
{
if (et.getText().toString().equals(password)) // they entered correct
{
// log them in
}
else
{
// bring up the keyboard
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
Toast.makeText(Main.this, "Incorrect.", Toast.LENGTH_SHORT).show();
}
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
我意识到这不起作用的原因可能是因为它在实际关闭软键盘之前运行此代码,但这就是我需要帮助的原因.我不知道另一种方式.
可能的答案主题可能是:
activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
Run Code Online (Sandbox Code Playgroud)
那种事,但我不确定.
解:
EditText et = (EditText)findViewById(R.id.et);
et.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{ …Run Code Online (Sandbox Code Playgroud) 我有一个带有信用卡输入表格的webview(带有标准<input type="text" />字段).在不同版本的Android中,我会得到不同的键盘.Kit-Kat似乎在表单内部不显示Prev/ Next键.
没有Prev/的示例Next:

相同的webview,带Prev/ Next:

我们正在开发一个应用程序,我们需要使用自定义字体(Typeface从应用程序的资产中加载)EditText.所述的Android输入方法文档声明如下:
当输入焦点移入或移出可编辑的文本字段时,Android会根据需要显示或隐藏输入法(例如屏幕键盘).系统还会决定UI和文本字段在输入方法上方的显示方式.例如,当屏幕上的垂直空间受到约束时,文本字段可能会填充输入方法上方的所有空间.
这是大胆的部分让我们绊倒.短语"文本字段可能填充..."似乎具有误导性,因为使用的文本字段不是EditText我们使用自定义字体设置的字段.(注意:到目前为止的答案都解释了如何设置自定义字体EditText.我们已经在设置自定义字体EditText.请在回答前仔细阅读问题.)这是隐藏输入法的屏幕截图:

这是软键盘显示和垂直空间受限时会发生的情况:

如您所见,输入法上方文本字段中的字体不是我们的自定义字体(我猜它是系统的默认Roboto字体).对于我们尝试作为输入法的每个软键盘都会发生这种情况.
我想强调的是,当空间受限制时,键盘上方的这个视图是由系统内部生成的,而不是由我们的任何代码生成的.
主要问题是:是否有一种方法(如果是这样,它是什么?)来控制这种方式的外观(缺乏更好的术语)代理视图 - 至少让它使用我们的自定义字体?
如果我们还可以控制键盘上方整个代理区域的布局和外观(包括"完成"按钮),这将是一个额外的好处.我们使用此线程中描述的技术的变体来使我们的活动使用与系统中设置的区域不同的区域设置,但是活动的区域设置显然未在此处应用.(如果是的话,按钮会在左边,并且会显示"בוצע",如果我将设备的区域设置更改为希伯来语,就会发生这种情况.[编辑:我可以通过使用该android:imeActionLabel属性获得正确的按钮标签EditText.但是,我不知道如何控制布局方向性.])
编辑每个请求,这是我如何构建我的对话框(相关部分摘自a DialogFragment):
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Dialog dlg = new Dialog(getActivity(), android.R.style.Theme_Holo_Light_Dialog_NoActionBar);
dlg.setContentView(R.layout.edit_note_dialog);
mAnimator = (ViewAnimator) dlg.findViewById(R.id.animator);
final Typeface hebrew = SystemData.getHebrewFont();
mNoteEditor = (EditText) dlg.findViewById(R.id.note_field);
mNoteEditor.setTypeface(hebrew);
// etc. (setting fonts for other elements, adding listeners, etc.)
}
Run Code Online (Sandbox Code Playgroud)
这是布局:
<?xml version="1.0" …Run Code Online (Sandbox Code Playgroud) android android-softkeyboard android-input-method android-edittext
我正在开发一个软键盘并且运行良好,但我不知道如何为长按键自定义弹出式布局.
<?xml version="1.0" encoding="UTF-8"?>
<android.inputmethodservice.KeyboardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/keyboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:keyPreviewLayout="@layout/preview"
android:keyBackground="@drawable/key_selector"
android:shadowRadius="0.0"
android:keyTextColor="#000000"
/>
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="10%p"
android:keyHeight="10%p">
<Row android:verticalGap="1%p" android:horizontalGap="0.5%p" android:keyHeight="8%p" android:keyWidth="9.6%p">
<Key android:codes="113" android:keyLabel="q" />
<Key android:codes="119" android:keyLabel="w" />
<Key android:codes="101" android:keyLabel="e"
/>
<Key android:codes="114" android:keyLabel="r" />
<Key android:codes="116" android:keyLabel="t" />
<Key android:codes="121" android:keyLabel="y"
android:popupKeyboard="@xml/keyboard_popup" android:popupCharacters="yýÿ"/>
<Key android:codes="117" android:keyLabel="u"
android:popupKeyboard="@xml/keyboard_popup" android:popupCharacters="uúù?ûü"/>
<Key android:codes="105" android:keyLabel="i"
android:popupKeyboard="@xml/keyboard_popup" android:popupCharacters="iíì?îï"/>
<Key android:codes="111" android:keyLabel="o"
android:popupKeyboard="@xml/keyboard_popup" android:popupCharacters="oóòõôö" />
<Key android:codes="112" android:keyLabel="p" />
</Row>
<Row android:verticalGap="1%p" android:horizontalGap="0.5%p" android:keyHeight="8%p" android:keyWidth="9.6%p"> …Run Code Online (Sandbox Code Playgroud) 我们在一个布局中有17个api,DPAD控制和4个edittexts用于引脚输入.当用户试图打开锁定在应用程序中的某些东西时,他会面对片段,他应该输入4位数的针脚.当打开视图时,我们以编程方式将焦点设置为第一个针脚edittext并显示键盘.当用户输入第一个引脚数字时,我们将视图焦点设置为第二个引脚edittext,其中用户应输入第二个引脚值,依此类推.
问题: 在用户输入第一个引脚值后,键盘焦点(突出显示)消失,对于第二个引脚,用户应该再次从键盘开始导航.21 api相同的代码运行良好,键盘焦点(突出显示)保持在以前的值.如何在17 api之前保持键盘焦点(突出显示),同时将视图焦点设置在另一个视图上?
这是代码:
public class PasswordFragment extends BaseFragment {
private final ArrayList<Disposable> disposables = new ArrayList<>();
@BindViews({R.id.passFirst, R.id.passSecond, R.id.passThird, R.id.passFour})
EditText[] pinEdits;
@BindDrawable(R.drawable.border_light)
Drawable borderLight;
@BindDrawable(R.drawable.border_white)
Drawable borderWhite;
@Inject
PrefsRepo prefsRepo;
@Inject
ToastUtil toastUtil;
@BindView(R.id.passTitle)
TextView passTitle;
@BindString(R.string.insert_pin)
String defDialogMes;
private InputMethodManager inputMethodManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
App.getAppComponent().inject(this);
inputMethodManager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, …Run Code Online (Sandbox Code Playgroud) android lostfocus lost-focus android-softkeyboard android-view
android ×10
keyboard ×2
android-ui ×1
android-view ×1
android-xml ×1
java ×1
javascript ×1
lost-focus ×1
lostfocus ×1
popup ×1
webview ×1