whi*_*GER 15 android android-intent android-layout
我会在此代码中添加一个EditText控件,以便它只接受十六进制数字.我该怎么做呢?
bin = (EditText)findViewById(R.id.editText02);
hex = (EditText)findViewById(R.id.editText3);
dec = (EditText)findViewById(R.id.editText1);
oct = (EditText)findViewById(R.id.editText04);
Run Code Online (Sandbox Code Playgroud)
Muh*_*eeb 39
在Android布局XML文件中,将以下属性添加到EditText:
<EditText
android:digits="0123456789ABCDEF"
android:inputType="textCapCharacters"
/>
Run Code Online (Sandbox Code Playgroud)
第一个属性仅允许输入这些数字.任何其他输入被拒绝且不显示.第二个属性将字符大写.
积分转到此博客文章:http: //mobile.antonio081014.com/2012/04/how-to-let-input-of-edittext-only-be.html
有两种选择,其中一种由 Muhammad Annaqeeb 使用以下属性进行描述:
\n\n<EditText\n android:id="@+id/myTextView"\n android:digits="0123456789ABCDEF"\n android:inputType="textCapCharacters"/>\nRun Code Online (Sandbox Code Playgroud)\n\n其他选项是使用InputFilter和 REGEX 仅允许十六进制字符:
\n\nEditText myTextField = (EditText) findViewById(R.id.myTextView);\n\nInputFilter inputFilterText = new InputFilter() {\n\n @Override\n public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {\n\n Pattern patern = Pattern.compile("^\\\\p{XDigit}+$");\n\n StringBuilder sb = new StringBuilder();\n\n for (int i = start; i < end; i++) {\n\n if (!Character.isLetterOrDigit(source.charAt(i)) && !Character.isSpaceChar(source.charAt(i)) ) {\n //is not(Letter or Digit or space);\n return "";\n }\n\n //Only allow characters "0123456789ABCDEF";\n Matcher matcher = patern.matcher(String.valueOf(source.charAt(i)));\n if (!matcher.matches()) {\n return "";\n }\n\n //Add character to Strinbuilder\n sb.append(source.charAt(i));\n\n /*counterForSpace++;\n if(counterForSpace>1){\n //Restar counter contador\n counterForSpace = 0;\n //Add space!\n sb.append(" ");\n }*/\n\n }\n //Return text in UpperCase.\n return sb.toString().toUpperCase();\n }\n};\n\nmyTextField.setFilters(new InputFilter[] { inputFilterText });\nmyTextField.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);\nRun Code Online (Sandbox Code Playgroud)\n\n两个选项的结果是:
\n\n\n\n也检查这个相关答案:
\n\nhttps://es.stackoverflow.com/a/211240/95
\n\n\nTextWatcher 也是不错的选择,但我更喜欢使用自定义过滤器。因此,更简单的方法是使用 InputFilter 并动态控制每个字符,请参见下面的示例,希望这会有所帮助
import android.text.InputFilter;
import android.text.InputType;
EditText input_moodMsg;
// initialize this edittext etc etc
//....
// here comes the filter to control input on that component
InputFilter inputFilter_moodMsg = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end,Spanned dest, int dstart, int dend) {
if (source.length()>44) return "";// max 44chars
// Here you can add more controls, e.g. allow only hex chars etc
for (int i = start; i < end; i++) {
if (!Character.isLetterOrDigit(source.charAt(i)) && !Character.isSpaceChar(source.charAt(i))
&& source.charAt(i)!='-'
&& source.charAt(i)!='.'
&& source.charAt(i)!='!'
) {
return "";
}
}
return null;
}
};
input_moodMsg.setFilters(new InputFilter[] { inputFilter_moodMsg });
input_moodMsg.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13798 次 |
| 最近记录: |