2015-01-10 2 views
2

Мне нужно установить маску для текстового представления, чтобы преобразовать его текст в определенный стиль (валюта, моя собственная, хотя вот так: Rls ###, ###, ###, ## #), но мне нужно будет получить исходный текст позже. Что мне делать?Пользовательский текстовый текст Android для отображения валюты

================================================================================================================================== ========

сказать, я передам эту строку в TextView: 2120000

Это должно быть видно пользователю, как: Rls 2,120,000

но метод должен возвращать .getText: 2120000

============================================================================================================================================== =======

код форматирования будет выглядеть так:

DecimalFormatSymbols symbols = new DecimalFormatSymbols(); 
symbols.setDecimalSeparator(','); 
DecimalFormat decimalFormat = new DecimalFormat("Rls ###,###,###,###", symbols); 
String prezzo = decimalFormat.format(Integer.parseInt(textTemp)); 

любая помощь будет оценена

ответ

2

Правильный путь будет таким: Для создания пользовательского TextView как Java Class

public class RialTextView extends TextView { 

    String rawText; 

    public RialTextView(Context context) { 
     super(context); 

    } 

    public RialTextView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public RialTextView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    public void setText(CharSequence text, BufferType type) { 
     rawText = text.toString(); 
     String prezzo = text.toString(); 
     try { 

      DecimalFormatSymbols symbols = new DecimalFormatSymbols(); 
      symbols.setDecimalSeparator(','); 
      DecimalFormat decimalFormat = new DecimalFormat("###,###,###,###", symbols); 
      prezzo = decimalFormat.format(Integer.parseInt(text.toString())); 
     }catch (Exception e){} 

     super.setText(prezzo, type); 
    } 

    @Override 
    public CharSequence getText() { 

     return rawText; 
    } 
} 

и в XML вместо <TextView тегов используя что-то вроде этого:

<com...RialTextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Price" 
     android:id="@+id/tv_itemgriditems_Price" 
     android:layout_below="@+id/tv_itemgriditems_Remain" 
     android:layout_centerHorizontal="true" 
     android:textSize="15sp" 
     /> 
+0

Проверьте мой ответ, я поделился той же идеей за 15 минут до вашего ответа. –

0

Вы должны изменить свой EditText в каждый раз, когда вы вводите входной символ. Попробуйте этот код

EditText currencyEditText= (EditText)findViewById(R.id.medittext); 
searchTo.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void afterTextChanged(Editable s) { 
     // 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 onTextChanged(CharSequence s, int start, int before, int count) { 

     DecimalFormatSymbols symbols = new DecimalFormatSymbols(); 
     symbols.setDecimalSeparator(','); 
     DecimalFormat decimalFormat = new DecimalFormat("Rls ###,###,###,###", symbols); 
     String prezzo = decimalFormat.format(Integer.parseInt(s)); 
     currencyEditText.setText(prezzo); 
    } 

}); 
+0

Это будет делать трюк в показе номера пользователю, но не поможет мне, когда я хочу получить исходное число из метода .getText(), который возвращает «RLS 2,100,000» ... Мне нужно, чтобы он возвращал «2100000» –

+0

Когда вы хотите получить ваш сырой номер, просто проанализируйте эти данные. замените coma на "", thats it – BeingMIAkashs

+0

Вы должны использовать свой собственный модифицированный метод, нет никакой встроенной библиотеки Android для этого – BeingMIAkashs

0

Давайте предположим, что у вас есть класс MyParser:

public class MyParser { 

    //... 
    public static String getRawValue(value) { 
     //Converts value to raw value, for instance, converts Rls 2,120,000 to 2120000 
    } 

    public static String getViewValue(value) { 
     //Converts value to view value, for instance, converts 2120000 to Rls 2,120,000 
    } 
    //... 
} 

Теперь, давайте еще один класс, называемый MyTextView:

public class MyTextView extends TextView { 

    public CharSequence getText() { 
     return MyParser.getRawValue(super.getText()); 
    } 

    public void setText (CharSequence text, TextView.BufferType type) { 
     super.setText(MyParser.getViewValue(text), type) 
    } 

} 
+0

Идея верна, но полный ответ, который я опубликовал, Спасибо, хотя –

+0

Я не знаю, t нравится ваш setText. setText должен обрабатывать только текст. Вы должны вызвать метод внутри, чтобы разрешить содержимое String. Представьте, что если вы хотите использовать один и тот же алгоритм синтаксического анализа, вы скопируете и вставьте код в другое место. Вы должны иметь многоразовые решения, поэтому у вас должно быть что-то вроде MyParser, предложенное в моем ответе. –

0

Вы можете использовать один и тот же объект DecimalFormat что вы использовали для форматирования строки для ее анализа другим способом:

DecimalFormatSymbols symbols = new DecimalFormatSymbols(); 
symbols.setDecimalSeparator(','); 
DecimalFormat decimalFormat = new DecimalFormat("Rls ###,###,###,###", symbols); 

try { 
    // get int value 
    int i = decimalFormat.parse(textView.getText().toString()).intValue(); 
} catch (ParseException e) { 
    // handle error here 
} 
Смежные вопросы