如何在 Android 应用程序的 TextView 中将文本的第一个字母大写

我也不是指 textInput。我的意思是,一旦在 TextView 中有了静态文本(从数据库调用中填充到用户输入的数据(可能不是大写的)) ,我如何确保它们是大写的?

谢谢!

144259 次浏览

I should be able to accomplish this through standard java string manipulation, nothing Android or TextView specific.

比如:

String upperString = myString.substring(0, 1).toUpperCase() + myString.substring(1).toLowerCase();

尽管可能有一百万种方法来实现这一点。请参阅 String文档。

编辑 我加了 .toLowerCase()

StringBuilder sb = new StringBuilder(name);
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
return sb.toString();

对于未来的访问者,你也可以(最好是 IMHO)从 Apache导入 WordUtil,并添加很多有用的方法到你的应用程序,如 capitalize如下所示:

How to capitalize the first character of each word in a string

以下命令不适用于 TextView,但适用于 EditText; 即使这样,它也适用于从键盘输入的文本,而不是用 setText ()加载的文本。更具体地说,它打开键盘上的大写字母,用户可以随心所欲地重写它。

android:inputType="textCapSentences"

或者

TV.sname.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

这将封住第一个字母。

或者

compile 'org.apache.commons:commons-lang3:3.4' //in build.gradle module(app)


tv.setText(StringUtils.capitalize(myString.toLowerCase().trim()));

您可以添加 < a href = “ https://comms.Apache.org/per/Commons-Lang/”rel = “ noReferrer”> Apache Commons Lang 在 Gradle 就像 ABc0

使用 WordUtils.capitalizeFully(name)

请创建一个自定义 TextView 并使用它:

public class CustomTextView extends TextView {


public CapitalizedTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}


@Override
public void setText(CharSequence text, BufferType type) {
if (text.length() > 0) {
text = String.valueOf(text.charAt(0)).toUpperCase() + text.subSequence(1, text.length());
}
super.setText(text, type);
}
}

For me none of working:

Function:

private String getCapsSentences(String tagName) {
String[] splits = tagName.toLowerCase().split(" ");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < splits.length; i++) {
String eachWord = splits[i];
if (i > 0 && eachWord.length() > 0) {
sb.append(" ");
}
String cap = eachWord.substring(0, 1).toUpperCase()
+ eachWord.substring(1);
sb.append(cap);
}
return sb.toString();
}

Result:

I/P brain O/P

I/P Brain and Health O/P Brain And Health

I/P brain And health to O/P Brain And Health

I/P brain's Health to O/P Brain's Health

I/P brain's Health and leg to O/P Brain's Health And Leg

希望这个能帮到你。

去 Kotlin 打电话就行了

textview.text = string.capitalize()

接受的答案是好的,但是如果您正在使用它从 android 中的 textView 获取值,那么最好检查字符串是否为空。如果字符串为空,则会引发异常。

private String capitizeString(String name){
String captilizedString="";
if(!name.trim().equals("")){
captilizedString = name.substring(0,1).toUpperCase() + name.substring(1);
}
return captilizedString;
}

对于 Kotlin,如果你想确定格式是“ Aaaaaaaaa”,你可以使用:

myString.toLowerCase(Locale.getDefault()).capitalize()

这里我写了一篇关于这个主题的详细文章,因为我们有几个选项,Android 中字符串的第一个字母大写

Java 中字符串第一个字母大写的方法

public static String capitalizeString(String str) {
String retStr = str;
try { // We can face index out of bound exception if the string is null
retStr = str.substring(0, 1).toUpperCase() + str.substring(1);
}catch (Exception e){}
return retStr;
}

Kotlin 字符串中第一个字母大写的方法

fun capitalizeString(str: String): String {
var retStr = str
try { // We can face index out of bound exception if the string is null
retStr = str.substring(0, 1).toUpperCase() + str.substring(1)
} catch (e: Exception) {
}
return retStr
}

使用 XML 属性

或者可以在 TextView 中设置此属性,也可以在 XML 中设置 EditText

android:inputType="textCapSentences"

For those using Jetpack Compose, you should use Compose's String.capitalize(locale: Locale), instead of Kotlin's, as follows:

import androidx.compose.ui.text.capitalize
import androidx.compose.ui.text.intl.Locale
    

Text("my text".capitalize(Locale.current)) // capitalizes first letter
Text("my text".toUpperCase(Locale.current)) // all caps

Note that Kotlin's .capitalize() 从1.5开始弃用 as it isn't locale friendly. The suggestion is to use .replaceFirstChar()

安卓工作室警告我

隐式使用默认语言环境是常见的错误来源: 改为使用大写(语言环境)。对于意味着内部的字符串,使用 Locale.ROOT,否则使用 Locale.getDefault ()。

感谢内置的自动修复,我做了这个扩展功能

fun String.titlecase(): String =
this.replaceFirstChar { // it: Char
if (it.isLowerCase())
it.titlecase(Locale.getDefault())
else
it.toString()
}

添加 Kotlin 扩展

fun String.firstCap()=this.replaceFirstChar { it.uppercase() }

用例

"lowercase letter".firstCap() //gives "Lowercase letter"

These lines of code helped me

String[] message_list=message.split(" ");
String full_message="";


for (int i=0; i<message_list.length; i++)
{
StringBuilder sb = new StringBuilder(message_list[i]);
sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
full_message=full_message+" "+sb;
}


textview_message.setText(full_message);

在 Android XML 中,这可以通过数据绑定来完成。

一旦在 build.gradle中启用:

android {
buildFeatures {
dataBinding = true
}
}

可以使用它从 XML 生成数据绑定,这允许使用简单的代码语句:

<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android">


<data>
<import type="java.util.Locale"/>
</data>


<androidx.appcompat.widget.LinearLayoutCompat
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">


<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/role"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text='@{ user.role != null ? user.role.substring(0, 1).toUpperCase(Locale.getDefault()) + user.role.substring(1) : "n/a" }'
android:gravity="center_vertical"
android:textSize="12sp"/>


</androidx.appcompat.widget.LinearLayoutCompat>


</layout>

显然,我们也可以导入 Kotlin 或 JetPack Compose 类..。

使用以下属性

android:inputType="textCapSentences|textCapWords"
//Capitalize the first letter of the words
public String Capitalize(String str) {
String[] arr = str.split(" "); //convert String to StringArray
StringBuilder stringBuilder = new StringBuilder();


for (String w : arr) {
if (w.length() > 1) {
stringBuilder.append(w.substring(0, 1).toUpperCase(Locale.US) + w.substring(1).toLowerCase(Locale.US) + " ");
}
}
return stringBuilder.toString().trim();
}