EditText 的首字母大写
Posted
技术标签:
【中文标题】EditText 的首字母大写【英文标题】:First letter capitalization for EditText 【发布时间】:2011-06-16 01:46:43 【问题描述】:我正在开发一个小型个人待办事项列表应用程序,到目前为止一切都运行良好。我想弄清楚一个小怪癖。每当我去添加一个新项目时,我都会有一个对话框,里面显示一个 EditText 视图。当我选择 EditText 视图时,键盘会按原样输入文本。在大多数应用程序中,默认值似乎是第一个字母的 shift 键......尽管在我看来它并没有这样做。必须有一种简单的方法来修复,但我反复搜索了参考资料,但找不到它。我在想适配器加载的引用必须有一个 xml 属性,但我不知道它是什么。
【问题讨论】:
【参考方案1】:静态(即在您的布局 XML 文件中):在您的 EditText
上设置 android:inputType="textCapSentences"
。
以编程方式:您必须在EditText
的InputType
中包含InputType.TYPE_CLASS_TEXT
,例如
EditText editor = new EditText(this);
editor.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);
可以结合文本及其变体来请求每个句子的第一个字符大写。
- Google Docs
【讨论】:
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);或 android:inputType="textCapSentences" 仅在您的设备键盘启用自动大写设置时才有效。 为什么启用此功能会导致我的android:lines="7"
不再显示 7 行(它现在默认为 1 行)
estEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);或 android:inputType="textCapSentences" 仅在您的设备键盘启用自动大写设置时才有效。 有什么替代方案,以编程方式?
@JamesWierzba 我将在这里引用 Shivang 的答案作为对多线支持的响应。添加 android:inputType="textCapSentences|textMultiLine"
使用 android:inputType="text|textMultiLine|textCapSentences" 允许多行文本【参考方案2】:
只需在 EditText 元素中使用 android:inputType="textCapWords"
。
例如:
<EditText
android:id="@+id/txtName"
android:layout_
android:layout_
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
【讨论】:
最好在代码元素中标记代码而不是加粗。 这个答案并不能真正帮助 OP 的问题。这将大写每个 word 的第一个字符,而不是输入文本的第一个字符(假定为一个句子)。虽然这可能对其他人有所帮助,但正确答案是公认的答案。【参考方案3】:在 XML 中的 EditText 中应用以下行。
android:inputType="textCapSentences|textMultiLine"
它还将允许多行支持。
【讨论】:
这应该是一个可以接受的答案,因为这是唯一不会将 EditText 折叠成单行的解决方案【参考方案4】:testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);
或android:inputType="textCapSentences"
仅在您的设备键盘启用自动大写设置时才有效。
【讨论】:
谢谢,我被卡住了,因为我刚刚禁用了设备键盘自动大写设置【参考方案5】:我遇到了同样的问题,只是分享我的发现。可能会对您和其他人有所帮助...
在你的布局上试试这个。在你的EditText
中添加下面的行。
android:inputType="textCapWords|textCapSentences"
对我有用..希望它也对你有用...
【讨论】:
【参考方案6】:要大写,您可以对编辑文本执行以下操作:
每个单词的首字母大写:
android:inputType="textCapWords"
每个句子的首字母大写:
android:inputType="textCapSentences"
每个字母都大写:
android:inputType="textCapCharacters"
但这只会对键盘进行更改,用户可以更改模式以小写字母书写。
所以如果你真的想要大写格式的数据,这种方法不太受欢迎,首先添加以下类:
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);
然后,
现在每个单词都大写:
CapitalizeFirstLetter.capitaliseName(name);
只大写第一个单词:
CapitalizeFirstLetter.capitaliseOnlyFirstLetter(data);
【讨论】:
【参考方案7】:如果您希望每个单词的首字母大写,请使用android:inputType="textCapWords"
为了更好的理解
<EditText
android:id="@+id/edt_description"
android:layout_
android:layout_
android:inputType="textCapWords"/>
如果每个句子都大写,那么就使用它。
android:inputType="textCapSentences"
xml 中的这一行。我的意思是在你的 EditText 中。
为了更好的理解
<EditText
android:id="@+id/edt_description"
android:layout_
android:layout_
android:inputType="textCapSentences"/>
【讨论】:
【参考方案8】:对于 EditText 中的大写,您可以选择以下两种输入类型:
android:inputType="textCapSentences" android:inputType="textCapWords"
textCapSentences 这将使每个句子中第一个单词的第一个字母为大写。
textCapWords 这将使每个单词的第一个字母为大写。
如果你想要这两个属性,只需使用 |用这两个属性签名
android:inputType="textCapSentences|textCapWords"
【讨论】:
【参考方案9】:我可以向你保证,两个答案都会使首字母大写,并且不会使 edittext 成为单行。
如果你想在 XML 中做,下面是代码
android:inputType="textCapWords|textCapSentences"
如果想在下面的活动/片段等中执行代码
momentTextView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS | InputType.TYPE_TEXT_FLAG_MULTI_LINE)
PS:如果您没有其他属性,您也可以使用管道“|”轻松添加它符号,只要确保属性属性之间的 xml 中没有空格
【讨论】:
【参考方案10】:在您的布局 XML 文件中:
设置android:inputType="textCapSentences"
在您的EditText
上将每个句子的第一个单词的第一个字母作为大写
或 android:inputType="textCapWords"
在 EditText 上将每个单词的首字母作为大写
【讨论】:
【参考方案11】:试试这个代码,它将所有单词的第一个字符大写。
- 为 EditText 视图设置 addTextChangedListener
edt_text.addTextChangedListener(watcher);
- 添加TextWatcher
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);
;
【讨论】:
【参考方案12】:像这样在 XML 和 JAVA 文件中设置输入类型,
在 XML 中,
android:inputType="textMultiLine|textCapSentences"
它还将允许多行和在 JAVA 文件中,
edittext.setRawInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);
确保您的键盘的自动大写设置为已启用。
【讨论】:
【参考方案13】:将此代码仅用于 EditText 的首字母大写
MainActivity.xml
<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_
android:layout_>
<EditText
android:id="@+id/et"
android:layout_
android:layout_
android:tag="true">
</EditText>
</RelativeLayout>
MainActivity.java
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)
);
【讨论】:
【参考方案14】:我创立了我的解决方案: 你有两种方法来解决它 在java中:
testEditText.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_FLAG_CAP_WORDS);
和xml:
<EditText
android:id="@+id/mytxt"
android:layout_
android:layout_
android:inputType="textCapWords"
android:textSize="12sp" />
【讨论】:
【参考方案15】:以前它曾经是 android:capitalize="words"
,现在已弃用。推荐的替代方法是使用android:inputType="textCapWords"
请注意,这仅在您的设备键盘自动大写设置启用时才有效。
要以编程方式执行此操作,请使用以下方法:
setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);
【讨论】:
【参考方案16】:以编程方式
TextView firstline = (TextView) findViewById(R.id.firstline);
firstline.setAllCaps(true);
【讨论】:
【参考方案17】:如果您在styles.xml 中编写样式,那么
移除 android:inputType 属性并添加以下行
<item name="android:capitalize">words</item>
【讨论】:
以上是关于EditText 的首字母大写的主要内容,如果未能解决你的问题,请参考以下文章
Android EditText("Textbox") :在用户输入时自动大写每个单词的首字母