I'm working on a little personal todo list app and so far everything has been working quite well. There is one little quirk I'd like to figure out. Whenever I go to add a new item, I have a Dialog with an EditText view showing inside. When I select the EditText view, the keyboard comes up to enter text, as it should. In most applications, the default seems to be that the shift key is held for the first letter... although it does not do this for my view. There has to be a simple way to fix, but I've searched the reference repeatedly and cannot find it. I'm thinking there has to be an xml attribute for the reference loaded by the Adapter, but I can't find out what it is.


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

编程上:你必须包括InputType。在EditText的InputType中的TYPE_CLASS_TEXT,例如

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

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

-谷歌文档


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


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

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


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

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

android:inputType="textCapWords|textCapSentences"

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


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

-为EditText视图设置addTextChangedListener

edt_text.addTextChangedListener(观察者);

-添加文本观察者

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有第一个字母的每个单词作为资本


我创立和我的解决方案: 有两种解法 在爪哇:

 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中的资本化,您可以选择以下两种输入类型:

android:inputType=“textCapSentences” android:inputType=“textCapWords”

textCapSentences 这将使每个句子中第一个单词的第一个字母成为大写字母。

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=" textcapsentence "这一行在你的xml。我指的是在你的EditText中。

为了更好地理解

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