Zeero0
Zeero0

Reputation: 2780

TimePicker AM/PM not changing with locale

For Arabic language I want to show TimePicker in English format.

Locale.setDefault(Locale.ENGLISH); Worked for me but AM/PM is not changing.

enter image description here

Upvotes: 1

Views: 997

Answers (1)

Cuong Nguyen
Cuong Nguyen

Reputation: 1018

I have created a function to set AM/PM use reflect, You can refer:

import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class CustomTimePicker {
    static void initPicker(Object object, String[] values) {
        try {
            Field[] fields = object.getClass().getDeclaredFields();

            for (Field field : fields) {
                // If there's a delegate, we use it instead.
                if (field.getName().equals("mDelegate")) {
                    field.setAccessible(true);
                    object = field.get(object);
                    fields = object.getClass().getDeclaredFields();
                    break;
                }
            }

            for (Field field : fields) {
                if (field.getName().equals("mAmPmStrings") ||
                        field.getName().equals("mShortMonths")) {
                    field.setAccessible(true);
                    field.set(object, values);
                } else if (field.getName().equals("mAmPmSpinner") ||
                        field.getName().equals("mMonthSpinner")) {
                    field.setAccessible(true);
                    Object innerObject = field.get(object);
                    Method method = innerObject.getClass().getDeclaredMethod(
                            "setDisplayedValues", String[].class);
                    method.setAccessible(true);
                    method.invoke(innerObject, (Object) values);
                }
            }

            Method[] methods = object.getClass().getDeclaredMethods();

            for (Method method : methods) {
                if (method.getName().equals("updateAmPmControl") ||
                        method.getName().equals("updateSpinners")) {
                    method.setAccessible(true);
                    method.invoke(object);
                    break;
                }
            }
        } catch (Exception e) {
            Log.e("error", e.getMessage(), e);
        }
    }
}

To use, you set default language and change AM/PM - Create file array am_pm in res/values/attrs.xml

<string-array name="am_pm">
    <item>am</item>
    <item>pm</item>
</string-array>

- when use:

Locale.setDefault(Locale.ENGLISH)
CustomTimePicker.initPicker(yourTimePicker, resources.getStringArray(R.array.am_pm))

- Result: result

Upvotes: 2

Related Questions