EditText是Android应用程序中的标准文本输入窗口小部件。如果用户需要在应用程序中输入文本,这是他们执行此操作的主要方式。
我想将自定义可绘制对象设置为 EditText 的光标。 对于 API < Android Q I'm using reflection and it works like intended. Starting from Android Q we have convenient method setTextCursorDrawable(@
如何检查在动态创建的edittext中调用了哪个edittext文本观察器侦听器
我可以为动态创建的Edittext添加Textwatcher监听器,所以基本上我会检查第一个edittext ontextchanged是否有任何值创建另一个edittext等等。如何检查...
将 EditText imeOptions 设置为 actionNext 在使用数字时没有效果
这是我的编辑文本:- 这是我的编辑文本:- <com.os.fastlap.util.customclass.EditTextPlayRegular android:id="@+id/full_name_et" style="@style/Edittext_white_13sp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/_5sdp" android:background="#00ffffff" android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" android:imeOptions="actionNext" android:inputType="text" android:maxLength="20" android:maxLines="1" android:nextFocusDown="@+id/last_name_et" android:textCursorDrawable="@null" /> 当我在编辑文本中删除 digit 时,它工作正常,但使用 digit imeOptions 则不起作用。但令人惊讶的是,如果我使用 singleLine 而不是 maxLines ,它就可以正常工作。但 singleLine 现在已被弃用。 我无法删除编辑文本中的数字,并且我不想使用已弃用的方法。任何人都可以解决这个问题。提前致谢 这是使用软件键盘按钮“下一步”的简化解决方案: final String NOT_ALLOWED_CHARS = "[^a-zA-Z0-9]+"; final EditText editText = (EditText) findViewById(R.id.editText); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void afterTextChanged(Editable s) { if (!TextUtils.isEmpty(s)) { // remove the listener to avoid StackoverflowException editText.removeTextChangedListener(this); // replace not allowed characters with empty strings editText.setText(s.toString().replaceAll(NOT_ALLOWED_CHARS, "")); // setting selection moves the cursor at the end of string editText.setSelection(editText.getText().length()); // add the listener to keep watching editText.addTextChangedListener(this); } } }); 这里正则表达式 [^a-zA-Z0-9]+ 对应于相关 android:digits 的 EditText 的允许值。 你可以使用 android:lines="1" 代替 android:maxLines 或 android:singleLine="true". 我知道你已经尝试了很多解决方案,请尝试使用 android:lines="1" 如果您之前没有尝试过,请尝试这些。 问题是您单击 Enter 键而不是所需的 actionNext 以便将光标移动到下一个 EditText 指定输入法操作 大多数软输入法在底部提供用户操作按钮 适合当前文本字段的角。默认情况下, 系统使用此按钮执行“下一步”或“完成”操作,除非您 文本字段允许多行文本(例如 android:inputType="textMultiLine"),在这种情况下操作按钮是 回车。但是,您可以指定其他操作 可能更适合您的文本字段,例如“发送”或“前往”。 它会导致您的操作按钮回车。所以这意味着不会触发android:nextFocusDown 首先,让我们看看已弃用的 singleLine 和 maxLines 之间有什么区别 单线 当您设置android:singleLine="true"时,一行文本在EditText中可见,但Enter键在键盘中不可见 最大行数 当您使用特定值设置 android:maxLines 属性时,只有相同数量的行文本在 EditText 中可见,并且键盘中的输入键对于 Entering 也可见。 因此,当您单击操作按钮时,它会根据您的代码触发 Enter Action。另外,如果您使用 android:inputType="textMultiLine" 属性,则必须使用 android:maxLines 更改 inputType 属性 最大行数 在 API 级别 1 中添加 int maxLines 使 TextView 最多为这个 许多行高。当用于可编辑文本时, inputType 属性的值必须与 textMultiLine 标志结合使用 要应用的 maxLines 属性。 可以是整数值,例如“100”。 当我使用正确的属性自定义您的代码时,它仍然触发 Enter 键而不是您想要的 IME_ACTION_NEXT 。我认为这没有解决问题,因为 textMultiLine 可以与文本及其变体组合以允许 字段中的多行文本。如果未设置此标志,则文本 字段将被限制为一行。对应于 TYPE_TEXT_FLAG_MULTI_LINE。 TYPE_TEXT_FLAG_MULTI_LINE 在 API 级别 3 中添加了 int TYPE_TEXT_FLAG_MULTI_LINE 标志 TYPE_CLASS_TEXT:可以在字段中输入多行文本。 如果未设置此标志,则文本字段将被限制为 单线。 IME 也可能选择在以下情况下不显示回车键: 未设置此标志,因为不需要创建新行。 常量值:131072 (0x00020000) 解决方案: 子类化 EditText 并调整 IME 选项。之后,您不需要 android:maxLines 或 android:singleLine 属性。 @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { InputConnection connection = super.onCreateInputConnection(outAttrs); int imeActions = outAttrs.imeOptions&EditorInfo.IME_MASK_ACTION; if ((imeActions&EditorInfo.IME_ACTION_NEXT) != 0) { // clear the existing action outAttrs.imeOptions ^= imeActions; // set the DONE action outAttrs.imeOptions |= EditorInfo.IME_ACTION_NEXT; } if ((outAttrs.imeOptions&EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) { outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION; } return connection; } 您还可以查看另一篇文章这里。我根据您的目的重新配置了这篇文章接受的答案 android:digits 指定 EditText 有数字输入方法,根据 docs 您可以使用 android:inputType="personName" 来实现与当前 digits attr 相同的效果 android:maxLines 只是让 TextView 最多这么多行高,不阻止用户输入更多字符。 与 android:lines 相同,只会使 TextView 恰好这么多行高。 您的解决方案的解决方法代码如下, XML 文件 <EditText android:id="@+id/full_name_et" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5sp" android:background="#00ffffff" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" android:maxLength="20" android:textCursorDrawable="@null" /> Java: final EditText edtfirstName = (EditText) findViewById(R.id.full_name_et); edtfirstName.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence charSequence, int start, int before, int count) { if (charSequence.toString().startsWith(" ")) { String result = charSequence.toString().replace(" ", "").replaceAll("[^a-zA-Z]+", ""); if (!charSequence.toString().equals(result)) { edtfirstName.setText(result); edtfirstName.setSelection(result.length()); } } else { String result = charSequence.toString().replaceAll("[^a-zA-Z ]+", ""); if (!charSequence.toString().equals(result)) { edtfirstName.setText(result); edtfirstName.setSelection(result.length()); } } } @Override public void afterTextChanged(Editable s) { } });
以编程方式更改 TextInputLayout 聚焦和非聚焦提示颜色
我想在 TEXT INPUT LAYOUT 处于聚焦或未聚焦状态时更改相同的提示颜色。我有两个 TEXT INPUT LAYOUT 字段。两个字段的颜色相同。但它处于聚焦状态颜色
如何在 EditText 控件中的文本更改后 0.5 秒执行某些操作?
我正在使用 EditText 控件过滤我的列表。我想在用户完成 EditText 键入后 0.5 秒过滤列表。我使用 TextWatcher 的 afterTextChanged 事件来实现此目的...
我使用日期和时间选择器来处理会议日期字段,因此不需要键盘。如何防止单击该字段后显示键盘?输入图像描述...
从保存的实例恢复片段时如何防止editText自动填充文本?
我有一个保存并显示多个片段的活动。 当我重新输入片段时,它会自动在所有编辑文本中填充文本。所有字段也使用相同的文本。 例子: 打开片段并
在此处输入代码我花了几个小时尝试解决 UI 问题。我需要设置一个 EditText 以将几行收集到弹出窗口中。 下面是 XLM 代码,如果...
当我尝试在屏幕底部的 EditText 中写入内容时,软键盘会隐藏 EditText。我该如何解决这个问题?下面是我的 xml 代码。我在 Frag 中使用这个...
FloatingActionButton 不会更改 LIstView 中的 EditText 项目
我试图通过单击 FloatingActionButton 来更改 ListView 中的 EditText。我想从我的活动中的每个 ListView 项目的字符串数组中 editText.setText 公开课
我想动态改变EditText中的颜色。 再具体一点: 按下按钮后,我输入到 EditText 的文本变为红色;(EditText 中已有的文本保持其原始状态
我有一个编辑文本 我有一个编辑文本 <EditText android:id="@+id/selectvalue" style="@style/searchList" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" android:focusable="true" android:hint="@string/search_order_hint" android:imeOptions="actionSearch" android:padding="10dp" android:singleLine="true" android:textColorHint="@color/common_gray" android:textCursorDrawable="@null" android:visibility="invisible" /> 我已将 TextWatcher 附加到此。 selectedValue.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { showKeyBoard(mContext, selectedValue); return false; } }); selectedValue.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void afterTextChanged(Editable s) { if (!selectedAssetType.equals(OrderBookTypes.MUTUAL_FUND_TYPE)) { loadSearchFilterData(); } } }); public void showKeyBoard(Context context, EditText edit) { InputMethodManager m = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); if (m != null) { edit.requestFocus(); m.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT); } } private void loadSearchFilterData() { if (!selectedValue.getText().toString().isEmpty()) { String s = selectedValue.getText().toString(); List<BoOrderBookDao> filterList = new ArrayList<>(); for (int i = 0; i < sortedFilteredList.size(); i++) { if (sortedFilteredList.get(i).getDpVal().toLowerCase().contains(s.toLowerCase())) { filterList.add(sortedFilteredList.get(i)); } } orderBookModel.clear(); orderBookModel.addAll(filterList); } else { orderBookModel.clear(); orderBookModel.addAll(sortedFilteredList); } if (orderBookModel.size() == 0) { setErrorMsg(mContext.getResources().getString(R.string.no_data_available_txt)); } else { itemListLayout.setVisibility(View.VISIBLE); errorScrollview.setVisibility(View.GONE); } if (orderAdapter != null) { orderAdapter.requestType = requestType; orderAdapter.notifyDataSetChanged(); } } 但我无法在那里打字。我打字时不显示字符。如果我删除 orderBookModel.addAll(filterList); 行,那么我可以输入,但删除该行会破坏我的功能。谁能解决这个问题? 添加 orderAdapter.notifyDataSetChanged();在 orderBookModel 中添加数据后。 更新代码替换此代码: private void loadSearchFilterData() { if (!selectedValue.getText().toString().isEmpty()) { String s = selectedValue.getText().toString(); List<BoOrderBookDao> filterList = new ArrayList<>(); for (int i = 0; i < sortedFilteredList.size(); i++) { if (sortedFilteredList.get(i).getDpVal().toLowerCase().contains(s.toLowerCase())) { filterList.add(sortedFilteredList.get(i)); } } orderBookModel.clear(); orderBookModel.addAll(filterList); orderAdapter.notifyDataSetChanged(); // Add this } else { orderBookModel.clear(); orderBookModel.addAll(sortedFilteredList); orderAdapter.notifyDataSetChanged(); // Add this } if (orderBookModel.size() == 0) { setErrorMsg(mContext.getResources().getString(R.string.no_data_available_txt)); } else { itemListLayout.setVisibility(View.VISIBLE); errorScrollview.setVisibility(View.GONE); } if (orderAdapter != null) { orderAdapter.requestType = requestType; orderAdapter.notifyDataSetChanged(); } }
Android Espresso:如何将文本输入到嵌入 TextInputLayout 的 editText 中
寻找一种方法将 Text 或 typeText 替换为嵌入 TextInputLayout 中的编辑文本。 我尝试过一些这样的事情: 执行(ViewActions.typeTextIntoFocusedView(“字符串”)); ...
我有以下响应...从这个响应我正在解析bulkprice数组及其对象,现在我正在尝试的是我需要将所有minqty值存储在一个数组列表中并想要转换所有
带有 maxLines 的 EditText - 如何显示顶行的一半
在我的布局中有 EditText 与 android:maxLines="4"。 当文本超过 4 行时,最后 4 行将强烈显示在 EditText 中。 这是设计使然。 但我怎样才能显示4条半线...
在我的 Android 活动中,我有一个 EditText,前后都有其他布局。 当我单击 EditText 时,软键盘打开,视图滚动到足以让我看到 cu...
当我使用 inputType 作为“textUri”时,建议文本输入不显示。 当我使用 inputType 作为“textUri”时,建议文本输入不显示。 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Enter URI" **android:inputType="textUri"** android:imeOptions="actionDone"/> </RelativeLayout> 我尝试使用 setPrivateImeOptions 方法,但仍然提示文本未显示。 即使我使用了 android:inputType="textUri|textCapSentences|textAutoCorrect" 但没有用。 public class CompleteEditTextActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit_text); EditText editText = findViewById(R.id.editText); editText.setPrivateImeOptions("com.android.internal.inputmethod:LatinIME"); } 已确定路径中的TYPE_TEXT_VARIATION_URI实现了shouldSuppressSuggestions的布尔值 packages/inputmethods/LatinIME/java/src/com/android/inputmethod/latin/InputAttributes.java // TODO: Have a helper method in InputTypeUtils // Make sure that passwords are not displayed in {@link SuggestionStripView}. final boolean shouldSuppressSuggestions = mIsPasswordField || InputTypeUtils.isEmailVariation(variation) **|| InputType.TYPE_TEXT_VARIATION_URI == variation** || InputType.TYPE_TEXT_VARIATION_FILTER == variation || flagNoSuggestions || flagAutoComplete; mShouldShowSuggestions = !shouldSuppressSuggestions; 因此,当我们在 XML 中声明“textURI”时,键盘顶部的建议单词不会显示。
为什么导航到其他屏幕然后返回时,编辑文本输入会填充所有其他编辑文本?
我有一个登录屏幕,其中有两个编辑文本用户名和密码。一旦我填写了这些编辑文本,我就使用以下方法导航到注册屏幕: navController.navigate(R.id.registerFragment);当我来的时候...
HTML 格式字符串插入 TextViews 和 EditText
我有一个数据库,它将存储 HTML 标记文本以保留 EditText 中的格式信息。我使用 HTML.toHtml(EditText.getText) 创建此字符串。我注意到这个方法包含了任何内容