2013-02-28 106 views
4

我无法在我的应用程序中获得EditText字段,以便在Droid Bionic上实际使用inputType =“textCapWords”或“textPersonName”。我测试过的其他手机似乎没有问题。大写inputTypes似乎没有工作。我也尝试了弃用的大写属性。并以编程方式设置事物。Motorola Bionic - 输入类型textPersonName和textCapWords不工作

有没有其他人遇到这个问题?除了使用TextWatcher实现自定义功能之外,还有什么建议?

<EditText 
     android:id="@+id/last_name_editor" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:hint="@string/last_name" 
     android:inputType="textCapWords"/> 

回答

0

要么这是一个特定于我的问题,要么没有人似乎有解决方案。使用TextWatcher解决方案。如果有人提出解决方案,会改变这一点。

+3

你可能已经发布了所谓的TextWatcher解决方案键入第一个字符... – 2016-05-06 18:24:06

+0

我已经发布了TextWatcther方式,我希望它帮助。 – 2016-11-24 06:36:05

4

你可以检查你的设备键盘设置。在一些设备(三星注2)他们给自动大写检查/联合国检查选项。

+2

在棉花糖,它可能会导致谷歌键盘设置“首字母大写每个句子的第一个字”关闭,我宁愿关闭(因为它不知道从一个句子简单的缩写或小数点),但这样做可以防止textCapWords从好好工作。再次,太多的自动更正类型功能不仅仅是帮助。 – 2016-06-02 21:36:32

2

这里是TextWatcher方式,任何人谁是仍然面临这个问题:

TextWatcher capitalizeTW = new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

    } 

    @Override 
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
     try{ 
      String inputString = ""+YOUR_TEXT_VIEW.getText().toString(); 
      String firstLetterCapString = WordUtils.capitalize(inputString); 
      if(!firstLetterCapString.equals(""+YOUR_TEXT_VIEW.getText().toString())){ 
       YOUR_TEXT_VIEW.setText(""+firstLetterCapString); 
       YOUR_TEXT_VIEW.setSelection(YOUR_TEXT_VIEW.getText().length()); 
      } 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void afterTextChanged(Editable editable) { 

    } 
}; 

//添加TextWatcher到你的TextView

YOUR_TEXT_VIEW.addTextChangedListener(capitalizeTW); 

// WordUtils

public final class WordUtils { 

private WordUtils(){ 

} 

public static String capitalize(String str) { 
    return capitalize(str, (char[]) null); 
} 

public static String capitalize(String str, char... delimiters) { 
    int delimLen = delimiters == null ? -1 : delimiters.length; 
    if (!TextUtils.isEmpty(str) && delimLen != 0) { 
     char[] buffer = str.toCharArray(); 
     boolean capitalizeNext = true; 

     for (int i = 0; i < buffer.length; ++i) { 
      char ch = buffer[i]; 
      if (isDelimiter(ch, delimiters)) { 
       capitalizeNext = true; 
      } else if (capitalizeNext) { 
       buffer[i] = Character.toTitleCase(ch); 
       capitalizeNext = false; 
      } 
     } 

     return new String(buffer); 
    } else { 
     return str; 
    } 
} 

private static boolean isDelimiter(char ch, char[] delimiters) { 
    if (delimiters == null) { 
     return Character.isWhitespace(ch); 
    } else { 
     char[] arr$ = delimiters; 
     int len$ = delimiters.length; 

     for (int i$ = 0; i$ < len$; ++i$) { 
      char delimiter = arr$[i$]; 
      if (ch == delimiter) { 
       return true; 
      } 
     } 

     return false; 
    } 
} 
} 

我希望这有助于。

1

可以试试这个...工作对我来说...

android:inputType="textCapWords" 

或者

android:inputType="textCapSentences" 

或者

android:inputType="textCapWords" 

对于三星S5/S7还有其他设置在设置名为“Auto Capitalize”用于制造第一租船人。

如果设置处于关闭状态,需要选择在上限