EditText的首字母大写

问题描述 投票:342回答:14

我正在开发一个小小的个人待办事项列表应用程序,到目前为止,一切都运行良好。我想知道一个小怪癖。每当我去添加一个新项目时,我都会看到一个带有EditText视图的Dialog。当我选择EditText视图时,键盘会按原样输入文本。在大多数应用程序中,默认似乎是为第一个字母保留shift键...虽然它不会为我的视图执行此操作。必须有一个简单的方法来修复,但我已经反复搜索引用,无法找到它。我认为必须有一个由适配器加载的引用的xml属性,但我无法找出它是什么。

android android-edittext
14个回答
769
投票

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

以编程方式:你必须在InputType.TYPE_CLASS_TEXTInputType中加入EditText,例如:

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

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

- Google Docs


1
投票

将此代码仅用于EditText的第一个字母大小写

ななcゔぃty。 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>

main activity.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) {

            }
        });

1
投票

对于EditText中的大写,您可以选择以下两种输入类型:

  1. 安卓的inputType = “textCapSentences”
  2. 安卓的inputType = “textCapWords”

textCapSentences 这将在每个句子中将第一个单词的第一个字母作为Capital。

textCapWords这将把每个单词的第一个字母作为Capital。

如果你想要两个属性只使用|用两个属性签名

android:inputType="textCapSentences|textCapWords"

0
投票

之前它曾经是android:capitalize="words",现已弃用。推荐的替代方案是使用android:inputType="textCapWords"

请注意,这仅适用于启用了设备键盘自动大写设置的情况。

要以编程方式执行此操作,请使用以下方法:

setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);


0
投票

我创建了我的解决方案:你有两种方法可以在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" />

0
投票

编程

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

0
投票

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

要使每个单词的首字母大写:

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

69
投票

只需在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


28
投票
testEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_WORDS);   

android:inputType="textCapSentences"只能工作如果您的设备键盘启用了自动大写设置。


27
投票

在XML中的EditText中应用以下行。

android:inputType="textCapSentences|textMultiLine"

它还将允许多线支持。


17
投票

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

在你的布局上尝试这个。在你的EditText下面的行。

android:inputType="textCapWords|textCapSentences"

在我身上工作正常..希望它也适用于你......


4
投票

我可以向你保证,答案将成为首字母大写,并且不会使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中没有空格


2
投票

在XML和JAVA文件中设置输入类型,如下所示,

在XML中,

安卓的inputType = “textMultiLine | textCapSentences”

它还允许多行和JAVA文件,

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

确保键盘的自动大写设置已启用。


2
投票

在您的布局XML文件中:

  • 设置android:inputType="textCapSentences"
  • 在你的EditText上,每个句子的第一个单词的第一个字母为首都
  • 或者在EditText上使用android:inputType="textCapWords"将每个单词的第一个字母作为首字母

1
投票

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

- 为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);
        }
    }
};
© www.soinside.com 2019 - 2024. All rights reserved.