下面列出了怎么用android.text.method.DigitsKeyListener的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* 创建 DigitsKeyListener
* @param inputType 输入类型
* @param accepted 允许输入的内容
* @return {@link DigitsKeyListener}
*/
public static DigitsKeyListener createDigitsKeyListener(final int inputType, final char[] accepted) {
DigitsKeyListener digitsKeyListener = new DigitsKeyListener() {
@Override
protected char[] getAcceptedChars() {
if (accepted != null) {
return accepted;
}
return super.getAcceptedChars();
}
@Override
public int getInputType() {
if (inputType != -1) {
return inputType;
}
return super.getInputType();
}
};
return digitsKeyListener;
}
@Override
public void setInputType(int type) {
if (type == -1) {
type = InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS | InputType.TYPE_TEXT_VARIATION_PASSWORD;
}
if (type == InputType.TYPE_CLASS_NUMBER ||
type == InputType.TYPE_NUMBER_FLAG_SIGNED ||
type == InputType.TYPE_NUMBER_FLAG_DECIMAL ||
type == InputType.TYPE_CLASS_PHONE) {
final String symbolExceptions = getSymbolExceptions();
this.setKeyListener(DigitsKeyListener.getInstance("0123456789." + symbolExceptions));
} else {
super.setInputType(type);
}
}
private void setDiscoveryDelay() {
final EditText input = new EditText(this);
input.setHint(this.getString(R.string.hint_discoverydelay));
input.setText(Integer.toString(nfc.getDiscoveryDelay()));
input.setInputType(EditorInfo.TYPE_CLASS_NUMBER);
input.setKeyListener(DigitsKeyListener.getInstance("01234567890"));
input.setSingleLine(true);
SetDelayHelper helper = new SetDelayHelper(nfc, input);
new AlertDialog.Builder(this, AlertDialog.THEME_HOLO_LIGHT)
.setTitle(R.string.action_discoverydelay)
.setMessage(R.string.lab_discoverydelay).setView(input)
.setPositiveButton(R.string.action_ok, helper)
.setNegativeButton(R.string.action_cancel, helper).show();
}
private void init(AttributeSet attrs, int defStyle) {
// @formatter:off
final TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.PinputView, defStyle, 0);
// @formatter:on
setFocusableInTouchMode(false);
setKeyListener(DigitsKeyListener.getInstance(false, false));
mPinLen = a.getInt(R.styleable.PinputView_pinputview_len, 4);
mCharPadding = (int) a.getDimension(R.styleable.PinputView_pinputview_characterPadding,
getResources().getDimension(R.dimen.pinputview_default_char_padding));
int foregroundColor = a.getColor(R.styleable.PinputView_pinputview_foregroundColor, Color.BLUE);
int backgroundColor = a.getColor(R.styleable.PinputView_pinputview_backgroundColor, Color.GRAY);
a.recycle();
initDrawables(foregroundColor, backgroundColor);
initFilters();
initializeAnimator();
}
/**
* gets the key listener by type
*/
protected static KeyListener getKeyListenerForType(NumericType type) {
switch (type) {
case DIALPAD:
return new DialerKeyListener();
case INTEGER:
return new DigitsKeyListener();
case SIGNED:
return new DigitsKeyListener(true, false);
case DECIMAL:
return new DigitsKeyListener(true, true);
case NONE:
default:
return null;
}
}
private void updateDropDownTextView() {
if (dropDown != null) {
if (currentPasswordType == 0) {
dropDown.setText(LocaleController.getString("PasscodePIN", R.string.PasscodePIN));
} else if (currentPasswordType == 1) {
dropDown.setText(LocaleController.getString("PasscodePassword", R.string.PasscodePassword));
}
}
if (type == 1 && currentPasswordType == 0 || type == 2 && SharedConfig.passcodeType == 0) {
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(4);
passwordEditText.setFilters(filterArray);
passwordEditText.setInputType(InputType.TYPE_CLASS_PHONE);
passwordEditText.setKeyListener(DigitsKeyListener.getInstance("1234567890"));
} else if (type == 1 && currentPasswordType == 1 || type == 2 && SharedConfig.passcodeType == 1) {
passwordEditText.setFilters(new InputFilter[0]);
passwordEditText.setKeyListener(null);
passwordEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
passwordEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
private void updateDropDownTextView() {
if (dropDown != null) {
if (currentPasswordType == 0) {
dropDown.setText(LocaleController.getString("PasscodePIN", R.string.PasscodePIN));
} else if (currentPasswordType == 1) {
dropDown.setText(LocaleController.getString("PasscodePassword", R.string.PasscodePassword));
}
}
if (type == 1 && currentPasswordType == 0 || type == 2 && SharedConfig.passcodeType == 0) {
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(4);
passwordEditText.setFilters(filterArray);
passwordEditText.setInputType(InputType.TYPE_CLASS_PHONE);
passwordEditText.setKeyListener(DigitsKeyListener.getInstance("1234567890"));
} else if (type == 1 && currentPasswordType == 1 || type == 2 && SharedConfig.passcodeType == 1) {
passwordEditText.setFilters(new InputFilter[0]);
passwordEditText.setKeyListener(null);
passwordEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
passwordEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
private void updateDropDownTextView()
{
if (dropDown != null)
{
if (currentPasswordType == 0)
{
dropDown.setText(LocaleController.getString("PasscodePIN", R.string.PasscodePIN));
}
else if (currentPasswordType == 1)
{
dropDown.setText(LocaleController.getString("PasscodePassword", R.string.PasscodePassword));
}
}
if (type == 1 && currentPasswordType == 0 || type == 2 && SharedConfig.passcodeType == 0)
{
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(4);
passwordEditText.setFilters(filterArray);
passwordEditText.setInputType(InputType.TYPE_CLASS_PHONE);
passwordEditText.setKeyListener(DigitsKeyListener.getInstance("1234567890"));
}
else if (type == 1 && currentPasswordType == 1 || type == 2 && SharedConfig.passcodeType == 1)
{
passwordEditText.setFilters(new InputFilter[0]);
passwordEditText.setKeyListener(null);
passwordEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
passwordEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
public static void localeDecimalInput(final EditText editText) {
final DecimalFormat decFormat = (DecimalFormat) DecimalFormat.getInstance(Locale.getDefault());
final DecimalFormatSymbols symbols=decFormat.getDecimalFormatSymbols();
final String defaultSeparator = Character.toString(symbols.getDecimalSeparator());
final String otherSeparator = ".".equals(defaultSeparator) ? "," : ".";
editText.setHint(String.format("0%s00",defaultSeparator));
editText.addTextChangedListener(new TextWatcher() {
private boolean isEditing =false;
@Override
public void onTextChanged(final CharSequence s, final int start, final int before, final int count) {
Log.d(TAG,s + " " + start + " " + before + " " + count);
}
@Override
public void afterTextChanged(Editable editable) {
if (isEditing)
return;
isEditing = true;
final int index = editable.toString().indexOf(otherSeparator);
if (index > 0)
editable.replace(index,index+1, defaultSeparator);
if (editable.toString().contains(".") || editable.toString().contains(","))
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789"));
else
editText.setKeyListener(DigitsKeyListener.getInstance("0123456789.,"));
isEditing =false;
}
});
}
private void updateDropDownTextView()
{
if (dropDown != null)
{
if (currentPasswordType == 0)
{
dropDown.setText(LocaleController.getString("PasscodePIN", R.string.PasscodePIN));
}
else if (currentPasswordType == 1)
{
dropDown.setText(LocaleController.getString("PasscodePassword", R.string.PasscodePassword));
}
}
if (type == 1 && currentPasswordType == 0 || type == 2 && SharedConfig.passcodeType == 0)
{
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(4);
passwordEditText.setFilters(filterArray);
passwordEditText.setInputType(InputType.TYPE_CLASS_PHONE);
passwordEditText.setKeyListener(DigitsKeyListener.getInstance("1234567890"));
}
else if (type == 1 && currentPasswordType == 1 || type == 2 && SharedConfig.passcodeType == 1)
{
passwordEditText.setFilters(new InputFilter[0]);
passwordEditText.setKeyListener(null);
passwordEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
passwordEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
/**
* 设置输入限制
*/
public void setLimit(String limit) {
mLimit = limit;
if (!VMStr.isEmpty(mLimit)) {
mInputView.setKeyListener(DigitsKeyListener.getInstance(mLimit));
}
}
private void setEditable(boolean editable) {
if (editable) {
etInput.setFocusable(true);
etInput.setKeyListener(new DigitsKeyListener());
} else {
etInput.setFocusable(false);
etInput.setKeyListener(null);
}
}
private void setEditable(boolean editable) {
if (editable) {
mCount.setFocusable(true);
mCount.setKeyListener(new DigitsKeyListener());
} else {
mCount.setFocusable(false);
mCount.setKeyListener(null);
}
}
public StringNumberWidget(Context context, FormEntryPrompt prompt, boolean secret) {
super(context, prompt, secret);
mAnswer.setTextSize(TypedValue.COMPLEX_UNIT_DIP, mAnswerFontSize);
mAnswer.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI | EditorInfo.IME_ACTION_NEXT);
// needed to make long readonly text scroll
mAnswer.setHorizontallyScrolling(false);
if (!secret) {
mAnswer.setSingleLine(false);
}
mAnswer.setKeyListener(new DigitsKeyListener(true, true) {
@Override
protected char[] getAcceptedChars() {
return new char[]{
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', '-', '+', ' '
};
}
});
if (prompt.isReadOnly()) {
setBackgroundDrawable(null);
setFocusable(false);
setClickable(false);
}
//This might be redundant, but I assume that it's about there being a difference
//between a display value somewhere. We should double check
if (prompt.getAnswerValue() != null) {
String curAnswer = getCurrentAnswer().getValue().toString().trim();
try {
mAnswer.setText(curAnswer);
} catch (Exception NumberFormatException) {
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.task_preferences);
// Set the time default to a numeric number only
EditTextPreference timeDefault = (EditTextPreference) findPreference(getString(R.string.pref_default_time_from_now_key));
timeDefault.getEditText().setKeyListener(DigitsKeyListener.getInstance());
}
private View createMeetingLengthTextBox() {
meetingLengthEditText = new EditText(this);
meetingLengthEditText.setGravity(Gravity.CENTER);
meetingLengthEditText.setKeyListener(new DigitsKeyListener());
meetingLengthEditText.setRawInputType(InputType.TYPE_CLASS_PHONE);
meetingLengthEditText.setLayoutParams(new LayoutParams(dipsToPixels(60), LayoutParams.WRAP_CONTENT));
meetingLengthEditText.setText(Integer.toString(meetingLength));
meetingLengthEditText.setLines(1);
meetingLengthSpinner = null;
return meetingLengthEditText;
}
private View createMeetingLengthTextBox() {
meetingLengthEditText = new EditText(this);
meetingLengthEditText.setGravity(Gravity.CENTER);
meetingLengthEditText.setKeyListener(new DigitsKeyListener());
meetingLengthEditText.setRawInputType(InputType.TYPE_CLASS_PHONE);
meetingLengthEditText.setLayoutParams(new LayoutParams(dipsToPixels(60), LayoutParams.WRAP_CONTENT));
meetingLengthEditText.setText(Integer.toString(meetingLength));
meetingLengthEditText.setLines(1);
meetingLengthSpinner = null;
return meetingLengthEditText;
}
/**
* Sets the default values for the preference screen
*/
private void initPreferences() {
// Binary file location
EditTextPreference binaryFileLocation = (EditTextPreference) findPreference(Constants.PREFERENCE_STORAGE_DIRECTORY);
if (TextUtils.isEmpty(binaryFileLocation.getText())) {
binaryFileLocation.setText(EnvironmentUtil.getProcedureDirectory());
}
// Image downscale factor
EditTextPreference imageDownscale = (EditTextPreference) findPreference(Constants.PREFERENCE_IMAGE_SCALE);
if (TextUtils.isEmpty(imageDownscale.getText())) {
imageDownscale.setText("" + Constants.IMAGE_SCALE_FACTOR);
}
imageDownscale.getEditText().setKeyListener(new DigitsKeyListener());
// View all edu resources
PreferenceScreen resourcePref = (PreferenceScreen) findPreference("s_education_resource");
Intent intent = EducationResourceList.getIntent(Intent.ACTION_PICK,
Audience.ALL);
intent.putExtra(Intent.EXTRA_INTENT, new Intent(Intent.ACTION_VIEW));
resourcePref.setIntent(intent);
// SD card loading procedures
PreferenceScreen intentPref = (PreferenceScreen) findPreference("s_procedures");
intentPref.setIntent(new Intent("org.sana.android.activity.IMPORT_PROCEDURE"));
//intentPref.setIntent(new Intent(ResourceSettings.this,
// ProcedureSdImporter.class));
}
private void setUpEditText() {
getEditText().setKeyListener(DigitsKeyListener.getInstance(false, false));
}
private void setInputType(ValueType valueType) {
editText.setFilters(new InputFilter[]{});
if (editTextModel.editable())
switch (valueType) {
case PHONE_NUMBER:
editText.setInputType(InputType.TYPE_CLASS_PHONE);
break;
case EMAIL:
editText.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
break;
case TEXT:
case LONG_TEXT:
editText.setKeyListener(null);
editText.setFocusable(false);
editText.setOnClickListener(v -> {
showEditDialog();
});
break;
case LETTER:
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
editText.setFilters(new InputFilter[]{
new InputFilter.LengthFilter(1),
(source, start, end, dest, dstart, dend) -> {
if (source.equals(""))
return source;
if (source.toString().matches("[a-zA-Z]"))
return source;
return "";
}});
break;
case NUMBER:
editText.setInputType(InputType.TYPE_CLASS_NUMBER |
InputType.TYPE_NUMBER_FLAG_DECIMAL |
InputType.TYPE_NUMBER_FLAG_SIGNED);
break;
case INTEGER_NEGATIVE:
case INTEGER:
editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);
break;
case INTEGER_ZERO_OR_POSITIVE:
case INTEGER_POSITIVE:
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
editText.setKeyListener(DigitsKeyListener.getInstance(false, false));
break;
case UNIT_INTERVAL:
editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
break;
case PERCENTAGE:
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
break;
case URL:
editText.setInputType(InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT);
break;
default:
break;
}
else {
editText.setInputType(0);
}
}
private void configureViews() {
editText.setFilters(new InputFilter[]{});
TextInputLayout.LayoutParams lp = new TextInputLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT);
lp.weight = 1f;
inputLayout.setLayoutParams(lp);
editText.setMaxLines(1);
editText.setVerticalScrollBarEnabled(false);
if (valueType != null)
switch (valueType) {
case PHONE_NUMBER:
editText.setInputType(InputType.TYPE_CLASS_PHONE);
descIcon.setVisibility(VISIBLE);
descIcon.setImageResource(R.drawable.ic_form_number);
break;
case EMAIL:
editText.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
descIcon.setVisibility(VISIBLE);
descIcon.setImageResource(R.drawable.ic_form_email);
break;
case TEXT:
editText.setInputType(InputType.TYPE_CLASS_TEXT);
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(50000)});
editText.setLines(1);
editText.setEllipsize(TextUtils.TruncateAt.END);
descIcon.setVisibility(VISIBLE);
descIcon.setImageResource(R.drawable.ic_form_text);
break;
case LONG_TEXT:
editText.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
editText.setMaxLines(Integer.MAX_VALUE);
editText.setEllipsize(null);
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE);
editText.setVerticalScrollBarEnabled(true);
editText.setScrollBarStyle(View.SCROLLBARS_INSIDE_INSET);
editText.setOverScrollMode(View.OVER_SCROLL_ALWAYS);
editText.setSingleLine(false);
editText.setImeOptions(EditorInfo.IME_FLAG_NO_ENTER_ACTION);
descIcon.setVisibility(VISIBLE);
descIcon.setImageResource(R.drawable.ic_form_text);
break;
case LETTER:
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
editText.setFilters(new InputFilter[]{
new InputFilter.LengthFilter(1),
(source, start, end, dest, dstart, dend) -> {
if (source.equals(""))
return source;
if (source.toString().matches("[a-zA-Z]"))
return source;
return "";
}});
descIcon.setVisibility(VISIBLE);
descIcon.setImageResource(R.drawable.ic_form_letter);
break;
case NUMBER:
editText.setInputType(InputType.TYPE_CLASS_NUMBER |
InputType.TYPE_NUMBER_FLAG_DECIMAL |
InputType.TYPE_NUMBER_FLAG_SIGNED);
descIcon.setVisibility(VISIBLE);
descIcon.setImageResource(R.drawable.ic_form_number);
break;
case INTEGER_NEGATIVE:
case INTEGER:
descIcon.setVisibility(VISIBLE);
descIcon.setImageResource(R.drawable.ic_form_number);
editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED);
break;
case INTEGER_ZERO_OR_POSITIVE:
case INTEGER_POSITIVE:
descIcon.setVisibility(VISIBLE);
descIcon.setImageResource(R.drawable.ic_form_number);
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
editText.setKeyListener(DigitsKeyListener.getInstance(false, false));
break;
case UNIT_INTERVAL:
descIcon.setVisibility(VISIBLE);
descIcon.setImageResource(R.drawable.ic_form_number);
editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
break;
case PERCENTAGE:
descIcon.setVisibility(VISIBLE);
descIcon.setImageResource(R.drawable.ic_form_percentage);
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
break;
case URL:
descIcon.setVisibility(VISIBLE);
descIcon.setImageResource(R.drawable.ic_i_url);
editText.setInputType(InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT);
break;
default:
break;
}
editText.setCompoundDrawablePadding(24);
binding.executePendingBindings();
}
/**
* Handle switching to local currency
*/
private void switchCurrency() {
// Keep a cache of previous amounts because, it's kinda nice to see approx what nano is worth
// this way you can tap button and tap back and not end up with X.9993451 NANO
if (useLocalCurrency) {
// Switch back to NANO
binding.sendAmount.setKeyListener(DigitsKeyListener.getInstance("0123456789."));
if (lastLocalCurrencyAmount != null && lastNanoAmount != null && wallet.getLocalCurrencyAmountNoSymbol().equals(lastLocalCurrencyAmount)) {
lastLocalCurrencyAmount = wallet.getLocalCurrencyAmountNoSymbol();
wallet.setSendNanoAmount(lastNanoAmount);
} else {
lastLocalCurrencyAmount = wallet.getLocalCurrencyAmountNoSymbol();
}
useLocalCurrency = false;
binding.sendAmount.setText(wallet.getSendNanoAmountFormatted());
lastNanoAmount = wallet.getSendNanoAmount();
binding.sendBalance.setText(getString(R.string.send_balance, wallet.getAccountBalanceBanano()));
binding.sendAmount.setFilters(new InputFilter[]{new DigitsInputFilter(Integer.MAX_VALUE, 6, Integer.MAX_VALUE)});
} else {
// Switch to local currency);
NumberFormat nf = NumberFormat.getCurrencyInstance(wallet.getLocalCurrency().getLocale());
String allowedChars = "0123456789.";
if (nf instanceof DecimalFormat) {
DecimalFormatSymbols sym = ((DecimalFormat)nf).getDecimalFormatSymbols();
allowedChars = String.format("0123456789%s", sym.getDecimalSeparator());
}
binding.sendAmount.setKeyListener(DigitsKeyListener.getInstance(allowedChars));
if (lastNanoAmount != null && lastLocalCurrencyAmount != null && wallet.getSendNanoAmount().equals(lastNanoAmount)) {
lastNanoAmount = wallet.getSendNanoAmount();
wallet.setLocalCurrencyAmount(lastLocalCurrencyAmount);
} else {
lastNanoAmount = wallet.getSendNanoAmount();
}
useLocalCurrency = true;
binding.sendAmount.setText(wallet.getLocalCurrencyAmountNoSymbol());
lastLocalCurrencyAmount = wallet.getLocalCurrencyAmountNoSymbol();
binding.sendBalance.setText(String.format("(%s)", wallet.getAccountBalanceLocalCurrency()));
binding.sendAmount.setFilters(new InputFilter[]{new DigitsInputFilter(Integer.MAX_VALUE, 2, Integer.MAX_VALUE)});
}
binding.sendAmount.setSelection(binding.sendAmount.getText().length());
}
@AfterViews
protected void initialize() {
setMinimumHeight(minHeight);
plusDrawable.mutate().setColorFilter(plusColor, PorterDuff.Mode.SRC_ATOP);
minusDrawable.mutate().setColorFilter(minusColor, PorterDuff.Mode.SRC_ATOP);
requestId = EDIT_AMOUNT_REQUEST.incrementAndGet();
signSwitcher.setFactory(() -> {
ImageView v = new ImageView(getContext());
v.setScaleType(ImageView.ScaleType.FIT_CENTER);
v.setLayoutParams(new ImageSwitcher.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
return v;
});
signSwitcher.setImageDrawable(minusDrawable);
primary.setKeyListener(keyListener);
primary.addTextChangedListener(textWatcher);
primary.setOnFocusChangeListener(selectAllOnFocusListener);
secondary.setKeyListener(new DigitsKeyListener(false, false) {
@Override
public boolean onKeyDown(View view, Editable content, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DEL) {
if (content.length() == 0) {
primary.requestFocus();
int pos = primary.getText().length();
primary.setSelection(pos, pos);
return true;
}
}
return super.onKeyDown(view, content, keyCode, event);
}
@Override
public int getInputType() {
return InputType.TYPE_CLASS_PHONE;
}
});
secondary.addTextChangedListener(textWatcher);
secondary.setOnFocusChangeListener(selectAllOnFocusListener);
if (!MyPreferences.isEnterCurrencyDecimalPlaces(getContext())) {
secondary.setVisibility(GONE);
delimiter.setVisibility(GONE);
}
}
private void setUpEditText() {
getEditText().setKeyListener(DigitsKeyListener.getInstance(false, false));
}
private void setSoftInputKeyboard() {
setKeyListener(new DigitsKeyListener(false, isDecimal));
}
private void setUpEditText() {
getEditText().setKeyListener(DigitsKeyListener.getInstance(false, false));
}
public DecimalWidget(Context context, FormEntryPrompt prompt, boolean secret, boolean compact) {
super(context, prompt, secret, compact);
// formatting
mAnswer.setTextSize(TypedValue.COMPLEX_UNIT_DIP, mAnswerFontSize);
mAnswer.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI | EditorInfo.IME_ACTION_NEXT);
// needed to make long readonly text scroll
mAnswer.setHorizontallyScrolling(isInCompactMode());
// only numbers are allowed
mAnswer.setKeyListener(new DigitsKeyListener(true, true));
// only 15 characters allowed
InputFilter[] fa = new InputFilter[1];
fa[0] = new InputFilter.LengthFilter(15);
mAnswer.setFilters(fa);
Double d = null;
if (getCurrentAnswer() != null) {
d = (Double)getCurrentAnswer().getValue();
}
NumberFormat nf = NumberFormat.getNumberInstance(Locale.ENGLISH);
nf.setMaximumFractionDigits(15);
nf.setMaximumIntegerDigits(15);
nf.setGroupingUsed(false);
if (d != null) {
Double dAnswer = (Double)getCurrentAnswer().getValue();
String dString = nf.format(dAnswer);
dString = dString.replace(',', '.');
mAnswer.setText(dString);
}
// disable if read only
if (prompt.isReadOnly()) {
setBackgroundDrawable(null);
setFocusable(false);
setClickable(false);
}
}
/**
* Sets the default values for the preference screen
*/
private void initPreferences() {
// Phone name
String phoneNum = ((TelephonyManager) getSystemService(
Context.TELEPHONY_SERVICE))
.getLine1Number();
Log.d(TAG, "Phone number of this phone: " + phoneNum);
if (TextUtils.isEmpty(phoneNum))
phoneNum = Constants.DEFAULT_PHONE_NUMBER;
EditTextPreference prefPhoneName = (EditTextPreference) findPreference(Constants.PREFERENCE_PHONE_NAME);
if (TextUtils.isEmpty(prefPhoneName.getText())) {
prefPhoneName.setText(phoneNum);
}
// Sana Dispatch Server URL
EditTextPreference prefMdsUrl = (EditTextPreference) findPreference(Constants.PREFERENCE_MDS_URL);
if (TextUtils.isEmpty(prefMdsUrl.getText())) {
prefMdsUrl.setText(Constants.DEFAULT_DISPATCH_SERVER);
}
// Initial packet size
EditTextPreference prefInitPacketSize = (EditTextPreference) findPreference(Constants.PREFERENCE_PACKET_SIZE);
if (TextUtils.isEmpty(prefMdsUrl.getText())) {
prefInitPacketSize.setText("" + Constants.DEFAULT_INIT_PACKET_SIZE);
}
prefInitPacketSize.getEditText().setKeyListener(new DigitsKeyListener());
// How often the database gets refreshed
EditTextPreference prefDatabaseRefresh = (EditTextPreference) findPreference(Constants.PREFERENCE_DATABASE_UPLOAD);
if (TextUtils.isEmpty(prefDatabaseRefresh.getText())) {
prefDatabaseRefresh.setText("" + Constants.DEFAULT_DATABASE_UPLOAD);
}
prefDatabaseRefresh.getEditText().setKeyListener(new DigitsKeyListener());
// Estimated network bandwidth
EditTextPreference prefEstimatedNetworkBandwidth = (EditTextPreference) findPreference(Constants.PREFERENCE_NETWORK_BANDWIDTH);
if (TextUtils.isEmpty(prefEstimatedNetworkBandwidth.getText())) {
prefEstimatedNetworkBandwidth.setText("" + Constants.ESTIMATED_NETWORK_BANDWIDTH);
}
prefEstimatedNetworkBandwidth.getEditText().setKeyListener(
new DigitsKeyListener());
}
public static DigitsKeyListener getDecimalKeyListener() {
char separator = DecimalFormatSymbols.getInstance().getDecimalSeparator();
return DigitsKeyListener.getInstance("0123456789" + separator);
}
public static DigitsKeyListener getSignedDecimalKeyListener() {
char separator = DecimalFormatSymbols.getInstance().getDecimalSeparator();
return DigitsKeyListener.getInstance("0123456789-" + separator);
}