2011-07-22 135 views
1

在EditText中输入字符串例如“Love is Life”时,输入单词“Love”后输入空格,然后如果点击字母'i'后自动需要将其更改为大写信'我'。在android中输入字符串时替换字符串

这意味着字符串的每个空格之后的字符需要在大写字母中,并且在EditText中输入字符时动态地进行更改以刺激骆驼格式格式。

如果有人知道意味着帮助我。

谢谢。

回答

2

您可以将TextWatcher添加到EditText,并在每次通知文本时收到通知。使用它,你可以解析字符串来查找空格后的字符,并将它们更新为大写。

这是我做的一个快速测试,效果非常好(远非最佳,因为每次编辑Editable时都会再次调用监听器...)。

editText.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      String string = s.toString(); 
      int index = -1; 
      while (((index = string.indexOf(' ', index + 1)) != -1) && (index + 1 < string.length())) { 
       // Get character 
       char c = string.charAt(index + 1); 
       if (Character.isLowerCase(c)) { 

        // Replace in editable by uppercase version 
        s.replace(index+1, index + 2, Character.toString(c).toUpperCase()); 
       } 
      } 
     } 
    }); 

为了避免被调用到的时候,你可以做一个char[]所有的变化,只提交到Editable如果进行了更改。

一个简单的解决方案可能是只使用split(' ')你的字符串,由大写版本替换String[]所有首字母(如果需要),并承诺只有一次的Editable

更简单的优化是为您的匿名类添加布尔值,将其设置为当您输入afterTextChanged时尝试,退出时将其设置为false,并且只在布尔值为false时处理字符串。

0

您需要实现该领域的TextWatcher,听的空间,一个空间后,你需要改变,如果etitText键升降功能的用户输入大写

0

你可以做到这一点的,字符。 getText.toString.trim.length-1 ==''稍后将设置为大写字母。

1

我知道这是旧的,我偶然发现它寻找相同的东西,并找到了完美的方式来做到这一点,所以我以为我会分享谁在这个线程上绊倒谁的人。其中包括当用户改变它为小写他们的自我和移动 - 您可以使用android:inputType="textCapWords

<EditText 
    android:inputType="textCapWords" /> 

否则将导致EditText控制,使每一个字开始用大写字母在布局XML为EditText设置继续下一个单词!