如何将DatePickerDialog中的阿拉伯数字替换为英文数字,同时在Android中仍然使用阿拉伯字符串?

y4ekin9u  于 2023-09-28  发布在  Android
关注(0)|答案(1)|浏览(120)

我在我的代码中使用了DatePickerDialog,并在使用它之前设置了应用程序的区域设置,并在我的基本活动的onCreate中设置了区域设置。它在阿拉伯语中工作完美,因为它使用阿拉伯语(称为印地语格式或东方阿拉伯数字)和阿拉伯字符串,如屏幕截图所示,但我需要在DatePickerDialog本身显示英语数字时,区域设置是阿拉伯语,同时根据客户端的要求保持阿拉伯字符串,因为阿拉伯数字在他的国家不使用,该应用程序将在其中运行。
这意味着所有的,都应该替换为0,1,2,3,4,5,6,7,8,9,这可能实现吗?
下面是我的代码:

BaseActivity

public abstract class BaseActivity extends AppCompatActivity{
   
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LocalizationHelper.setLocal(this);
    }
   }

LocalizationHelper.java

public class LocalizationHelper {
    
        public static void setLocal(Context context) {
            Locale locale = new Locale(getLanguage(context), "LY");
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            Resources resources = context.getResources();
            resources.updateConfiguration(config, resources.getDisplayMetrics());
        }
    
        public static String getLanguage(Context context) {
            return SharedPreferencesHelper.getLanguage(context);
        }
    }

调用对话框:

public static void showDatePicker(Context context, OnDialogActionCallBack onDialogActionCallBack, DashboardFilterDate date) {
    LocalizationHelper.setLocal(context);
    final Calendar c = Calendar.getInstance();
    DatePickerDialog pickerDialog = new DatePickerDialog(context, (view, year1, month1, dayOfMonth) -> onDialogActionCallBack.onPositiveButtonClicked(dayOfMonth, month1, year1),
            date != null ? date.getYear() : c.get(Calendar.YEAR),
            date != null ? date.getMonth() : c.get(Calendar.MONTH),
            date != null ? date.getDay() : c.get(Calendar.DAY_OF_MONTH));
    pickerDialog.show();
}

tvokkenx

tvokkenx1#

如果你想改变结果为英文数字你可以使用这个代码

public static String arabicNumbersToEn(String str) {
        char[] chars = new char[str.length()];
        for(int i=0; i<str.length(); i++) {
            char ch = str.charAt(i);
            if (ch >= 0x0660 && ch <= 0x0669){ch -= 0x0660 - '0';}
            else if (ch >= 0x06f0 && ch <= 0x06F9){ ch -= 0x06f0 - '0';}
            chars[i] = ch;
        }
        return new String(chars);
    }

相关问题