android fonts numbers persian farsi

android - Cómo mostrar números persas(farsi) en vistas



fonts numbers (10)

Quiero mostrar los números persas (farsi) en las vistas. Por ejemplo, calculé una fecha y la convertí al calendario Jalali, pero ¿cómo puedo mostrarla en números persas?


Al usar la clase Typeface, el tipo de fuente de una vista se puede cambiar a fuente Farsi para que los números se puedan mostrar con fuentes Farsi:

Typeface typeface = Typeface.createFromAsset(getAssets(), "FarsiFontName.ttf"); myView.setTypeface(typeface);


La forma simple y correcta es usar Locale y String.format . Simplemente puede usar una fuente persa para la vista en caso de que la fuente predeterminada no admita los números persas. Así es como lo haría.

Locale locale = new Locale("fa"); return String.format(locale, "%04d", year) + "/" + String.format(locale, "%02d", month) + "/" + String.format(locale, "%02d", day);

También puede usar la biblioteca PersianCaldroid , que no solo le proporciona API simples como PersianDate.toStringInPersian() sino que también le permite tener persa DatePicker y CalendarView.


Otra forma de mostrar números con fuente persa es mediante el uso de la siguiente clase de ayuda:

public class FormatHelper { private static String[] persianNumbers = new String[]{ "۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹" }; public static String toPersianNumber(String text) { if (text.length() == 0) { return ""; } String out = ""; int length = text.length(); for (int i = 0; i < length; i++) { char c = text.charAt(i); if (''0'' <= c && c <= ''9'') { int number = Integer.parseInt(String.valueOf(c)); out += persianNumbers[number]; } else if (c == ''٫'') { out += ''،''; } else { out += c; } return out; } }

Guarde esta clase como formato UTF8 y utilícela como el siguiente código FormatHelper.toPersianNumber (numberString);


Puede crear una vista personalizada y adjuntar fuente farsi en eso, finalmente, puede usar eso en xml views.most la fuente farsi no tiene un número de inglés en el mapa de caracteres y puede usar simplemente eso sin ningún problema. por ejemplo :

public class TextViewStyle extends TextView { public TextViewStyle(Context context) { super(context); init(context, null, 0); } public TextViewStyle(Context context, AttributeSet attrs) { this(context, attrs, 0); init(context, attrs, 0); } public TextViewStyle(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context, attrs, defStyle); } private void init(Context context, AttributeSet attrs, int defStyle){ try { TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.TextViewStyle, defStyle, 0); String str = a.getString(R.styleable.TextViewStyle_fonttype); switch (Integer.parseInt(str)) { case 0: str = "fonts/byekan.ttf"; break; case 1: str = "fonts/bnazanin.ttf"; break; case 2: str = "fonts/btitr.ttf"; break; case 3: str = "fonts/mjbeirut.ttf"; break; case 4: str = "fonts/bnazanin_bold.ttf"; break; default: str = "fonts/bnazanin.ttf"; break; } setTypeface(FontManager.getInstance(getContext()).loadFont(str)); } catch (Exception e) { e.printStackTrace(); } } }

attr.xml:

<declare-styleable name="TextViewStyle"> <attr name="selected_background" format="integer"/> <attr name="fonttype"> <enum name="byekan" value="0"/> <enum name="bnazanin" value="1"/> <enum name="btitr" value="2"/> <enum name="mjbeirut" value="3"/> <enum name="bnazaninBold" value="4"/> </attr> </declare-styleable>


Puedes usar el siguiente método para mostrar el número en persa:

public String NumToPersion(String a){ String[] pNum =new String[]{"۰","۱","۲","۳","۴","۵","۶","۷","۸","۹" }; a=a.replace("0",pNum[0]); a=a.replace("1",pNum[1]); a=a.replace("2",pNum[2]); a=a.replace("3",pNum[3]); a=a.replace("4",pNum[4]); a=a.replace("5",pNum[5]); a=a.replace("6",pNum[6]); a=a.replace("7",pNum[7]); a=a.replace("8",pNum[8]); a=a.replace("9",pNum[9]); return a; }


Simplemente hazlo en kotlin para enteros sin signo

fun toPersian(n:Int) : String{ val p="۰۱۲۳۴۵۶۷۸۹" return n.toString().trim().map{ p[it.toString().trim().toInt()] }.joinToString() } txt_view?.text=toPersian(12087)//۱۲۰۸۷


debe agregar el teclado persa estándar en Windows y cambiar a este teclado cuando desee escribir dígitos y palabras persas. Es trabajo para mi


establecer el lugar a árabe, Egipto

int i = 25; NumberFormat nf = NumberFormat.getInstance(new Locale("ar","EG")); nf.format(i);


intente esto mientras escribe para editar texto:

public static void edtNumE2P(final EditText edt) { edt.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int pstart, int pbefore, int pcount) { // for (String chr : new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}) { for (char chr : "0123456789".toCharArray()) { if (s.toString().contains("" + chr)) { edt.setText(MyUtils.numE2P(edt.getText().toString())); edt.setSelection(edt.getText().length()); } } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }); }

Y prueba esto también:

public static String numE2P(String str, boolean reverse) { String[][] chars = new String[][]{ {"0", "۰"}, {"1", "۱"}, {"2", "۲"}, {"3", "۳"}, {"4", "۴"}, {"5", "۵"}, {"6", "۶"}, {"7", "۷"}, {"8", "۸"}, {"9", "۹"} }; for (String[] num : chars) { if (reverse) { str = str.replace(num[1], num[0]); } else { str = str.replace(num[0], num[1]); } } // Log.v("numE2P", str); return str; }


puede usar Time4J para mostrar la fecha y usar ChronoFormatter para mostrar:

ChronoFormatter<PersianCalendar> formatter= ChronoFormatter.setUp(PersianCalendar.axis(), PERSIAN_LOCALE) .addPattern("dd", PatternType.CLDR).build(); // it will display day : ۲۴

o

.addPattern("dd MMMM", PatternType.CLDR).build(); // مرداد ۲۴

y con la definición de patrones, puede elegir cómo mostrar la fecha: ChronoFormatter