EditText的首字母大写

我正在做一个小的个人待办事项列表应用程序,到目前为止一切都工作得很好。有个小怪癖我想弄清楚。每当我去添加一个新项目,我有一个对话框,其中显示一个EditText视图。当我选择EditText视图时,键盘弹出来输入文本,这是应该的。在大多数应用程序中,默认的shift键似乎是第一个字母…尽管在我看来它并没有这样做。有一个简单的方法来修复,但我已经反复搜索参考,不能找到它。我认为必须有一个由适配器加载的引用的xml属性,但我找不到它是什么。

206695 次浏览

静态地(即在布局XML文件中):在你的EditText上设置android:inputType="textCapSentences"

编程方式:你必须在EditTextInputType中包含InputType.TYPE_CLASS_TEXT

EditText editor = new EditText(this);
editor.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

可以与文本及其变体相结合,以要求每个句子的第一个字符大写。

-谷歌Docs

在EditText元素中使用android:inputType="textCapWords"即可。

例如:

<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 < / p >

testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);

android:inputType="textCapSentences"将工作,如果你的设备键盘自动大写设置启用。

我也遇到了同样的问题,只是分享了我的发现。可能会帮助你和其他人…

在你的布局上试试这个。在EditText中添加下面的行。

android:inputType="textCapWords|textCapSentences"

对我来说很好..希望它也适用于你…

试试这个代码,它将大写所有单词的第一个字符。

-为EditText视图设置addTextChangedListener

edt_text.addTextChangedListener(观察者);

添加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);
}
}
};

在XML编辑文本中应用以下行。

android:inputType="textCapSentences|textMultiLine"

它还允许多线支持。

以前它是android:capitalize="words",现在已弃用。推荐的替代方法是使用android:inputType="textCapWords"

请注意,这将只在您的设备键盘自动大写设置启用。

要通过编程实现,请使用以下方法:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);

在XML和JAVA文件中设置输入类型,

在XML中,

android: inputType = " textMultiLine | textCapSentences”

它还将允许多行和在JAVA文件中,

edittext.setRawInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

确保你键盘的自动大写设置为启用

使用此代码仅第一个字母大写的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_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

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) {


}
});

我可以向你保证,两个答案的第一个字母大写,不会使编辑文本单行。

如果你想用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属性属性之间没有空格

在你的布局XML文件中:

  • 设置android:inputType="textCapSentences"

  • 在你的EditText中,每个句子的第一个单词的第一个字母作为大写

  • android:inputType="textCapWords"在你的EditText有每个单词的首字母作为大写

我创立和我的解决方案: 有两种解法 Java:

 testEditText.setInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_FLAG_CAP_WORDS);

和XML:

 <EditText
android:id="@+id/mytxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"
android:textSize="12sp" />

以编程方式

TextView firstline = (TextView) findViewById(R.id.firstline);
firstline.setAllCaps(true);

要大写,您可以对编辑文本执行以下操作:

将第一个字母大写每一个字:

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);

对于EditText中的资本化,您可以选择以下两种输入类型:

  1. android: inputType = " textCapSentences "
  2. android: inputType = " textCapWords "
< p > textCapSentences < br > 这将使每句话中第一个单词的第一个字母成为大写字母

< >强textCapWords 这将使每个单词的第一个字母作为大写字母

如果你想要两个属性都使用|符号

android:inputType="textCapSentences|textCapWords"

如果您在styles.xml中编写样式,那么

将android: inputType属性并在以下行中添加

<item name="android:capitalize">words</item>

如果你想让每个单词的首字母都大写,那么使用android:inputType="textCapWords"

为了更好地理解

 <EditText
android:id="@+id/edt_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapWords"/>
如果你每个句子都大写,那就用它。 android:inputType="textCapSentences"这一行在你的xml。我的意思是在你的EditText。

为了更好地理解

<EditText
android:id="@+id/edt_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textCapSentences"/>