First letter capitalization for EditText
我正在开发一个小小的个人待办事项列表应用程序,到目前为止,一切都运行良好。 我想知道一个小怪癖。 每当我去添加一个新项目时,我都会看到一个带有EditText视图的Dialog。 当我选择EditText视图时,键盘会按原样输入文本。 在大多数应用程序中,默认似乎是为第一个字母保留shift键...虽然它不会为我的视图执行此操作。 必须有一个简单的方法来修复,但我已经反复搜索引用,无法找到它。 我认为必须有一个由适配器加载的引用的xml属性,但我无法找出它是什么。
静态地(即在您的布局XML文件中):在
以编程方式:您必须在
1 2 | EditText editor = new EditText(this); editor.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); |
Can be combined with text and its variations to request capitalization of the first character of every sentence.
- 谷歌文档
只需在EditText元素中使用
例如:
1 2 3 4 5 6 7 8 9 | <EditText android:id="@+id/txtName" android:layout_width="0dp" android:layout_height="40dp" android:layout_weight="0.7" android:inputType="textCapWords" android:textColorHint="#aaa" android:hint="Name Surname" android:textSize="12sp" /> |
请参考以下链接以供参考:
http://developer.android.com/reference/android/widget/TextView.html#attr_android%3ainputType
1 | testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); |
或
在XML中的EditText中应用以下行。
1 | android:inputType="textCapSentences|textMultiLine" |
它还将允许多线支持。
我遇到了同样的问题,只是分享我发现的东西。可能会帮助你和其他人......
在你的layout.add
1 | android:inputType="textCapWords|textCapSentences" |
在我身上工作正常..希望它也适用于你......
我可以向你保证,答案将成为首字母大写,并且不会使edittext单行。
如果你想在下面的XMl中执行它是代码
1 | android:inputType="textCapWords|textCapSentences" |
如果想在活动/片段等中进行下面的代码
1 | momentTextView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS | InputType.TYPE_TEXT_FLAG_MULTI_LINE) |
PS:如果你还有其他财产也可以轻松添加管道"|"符号,只需确保属性属性之间的xml中没有空格
对于EditText中的大写,您可以选择以下两种输入类型:
android:inputType="textCapSentences" android:inputType="textCapWords"
textCapSentences
这将在每个句子中将第一个单词的第一个字母作为Capital。
textCapWords
这将把每个单词的第一个字母作为Capital。
如果你想要两个属性只使用|用两个属性签名
1 | android:inputType="textCapSentences|textCapWords" |
在您的布局XML文件中:
-
设置
android:inputType="textCapSentences" -
在
EditText 上将每个句子的第一个单词的第一个字母作为首字母 -
或者在EditText上使用
android:inputType="textCapWords" 将每个单词的第一个字母作为首字母
在XML和JAVA文件中设置输入类型,如下所示,
在XML中,
android:inputType="textMultiLine|textCapSentences"
它还允许多行和JAVA文件,
1 | edittext.setRawInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); |
确保键盘的自动大写设置已启用。
尝试此代码,它将使所有单词的第一个字符大写。
- 为EditText视图设置addTextChangedListener
edt_text.addTextChangedListener(观察者);
- 添加TextWatcher
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | TextWatcher watcher = new TextWatcher() { int mStart = 0; @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { mStart = start + count; } @Override public void afterTextChanged(Editable s) { String input = s.toString(); String capitalizedText; if (input.length() < 1) capitalizedText = input; else if (input.length() > 1 && input.contains("")) { String fstr = input.substring(0, input.lastIndexOf("") + 1); if (fstr.length() == input.length()) { capitalizedText = fstr; } else { String sstr = input.substring(input.lastIndexOf("") + 1); sstr = sstr.substring(0, 1).toUpperCase() + sstr.substring(1); capitalizedText = fstr + sstr; } } else capitalizedText = input.substring(0, 1).toUpperCase() + input.substring(1); if (!capitalizedText.equals(edt_text.getText().toString())) { edt_text.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) { edt_text.setSelection(mStart); edt_text.removeTextChangedListener(this); } }); edt_text.setText(capitalizedText); } } }; |
将此代码仅用于EditText的第一个字母大小写
MainActivity.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/et" android:layout_width="match_parent" android:layout_height="wrap_content" android:tag="true"> </EditText> </RelativeLayout> |
MainActivity.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | EditText et = findViewById(R.id.et); et.addTextChangedListener(new TextWatcher() { public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { if (et.getText().toString().length() == 1 && et.getTag().toString().equals("true")) { et.setTag("false"); et.setText(et.getText().toString().toUpperCase()); et.setSelection(et.getText().toString().length()); } if(et.getText().toString().length() == 0) { et.setTag("true"); } } public void afterTextChanged(Editable editable) { } }); |
要进行大写,您可以使用编辑文本执行以下操作:
要使每个单词的首字母大写:
1 | android:inputType="textCapWords" |
要使每个句子的首字母大写:
1 | android:inputType="textCapSentences" |
使每个字母大写:
1 | android:inputType="textCapCharacters" |
但这只会对键盘和用户进行更改,可以在小写的情况下改变写信的模式。
因此,如果您真的想要大写格式的数据,首先添加以下类,这种方法不太受欢迎:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class CapitalizeFirstLetter { public static String capitaliseName(String name) { String collect[] = name.split(""); String returnName =""; for (int i = 0; i < collect.length; i++) { collect[i] = collect[i].trim().toLowerCase(); if (collect[i].isEmpty() == false) { returnName = returnName + collect[i].substring(0, 1).toUpperCase() + collect[i].substring(1) +""; } } return returnName.trim(); } public static String capitaliseOnlyFirstLetter(String data) { return data.substring(0,1).toUpperCase()+data.substring(1); } } |
然后,
现在把每个词都大写:
1 | CapitalizeFirstLetter.capitaliseName(name); |
仅使用第一个词:
1 | CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data); |
编程
1 2 | TextView firstline = (TextView) findViewById(R.id.firstline); firstline.setAllCaps(true); |
我创立了我的解决方案:
你有2种方法来解决它
在java中:
1 2 | testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS); |
和xml:
1 2 3 4 5 6 | <EditText android:id="@+id/mytxt" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textCapWords" android:textSize="12sp" /> |
之前它曾经是
请注意,这仅适用于启用了设备键盘自动大写设置的情况。
要以编程方式执行此操作,请使用以下方法: