transferencia total tamaño sirve significa representacion recomendado que procesador para opciones movil logger forzar elegir desarrollador aceleracion android arabic right-to-left

android - total - tamaño de buffer de logger recomendado



Forzar la dirección de diseño RTL no funciona para la aplicación (2)

Estoy intentando agregar compatibilidad con el lenguaje RTL en mi aplicación (específicamente en árabe en este momento). También apoyaré el inglés. Qué he hecho:

  • Establecer minSdkVersion a 17
  • Se agregó android:supportsRtl="true" a mi etiqueta de aplicación en AndroidManifest.xml
  • Cambié mis atributos izquierda / derecha para comenzar / terminar

Al principio hice estos cambios manualmente, luego utilicé el elemento de menú "Refactor -> Agregar soporte RTL donde sea posible ..." de Android Studio.

Cuando obtengo una vista previa de mis archivos de diseño, puedo ver que la vista previa de RTL refleja correctamente la interfaz de usuario; sin embargo, incluso cuando uso la "Dirección de diseño RTL forzado", mi aplicación no muestra el diseño RTL. La interfaz de usuario del sistema se invierte, por lo que la opción funciona en general.

¿Hay algo más que deba hacer para mostrar el diseño de RTL? Espero haber perdido algo obvio. Estoy probando esto en un emulador de API 21.

Actualizar

Heredé algo de este código. Algo podría estar anulando una configuración y forzando esto en el modo LTR. Hice una aplicación de prueba para probar el modo RTL y funcionó bien. ¿Qué tipo de código podría hacer que se ignore (o se anule) la configuración de "Forzar dirección de diseño RTL"?

Actualización 2

He comprobado que la configuración regional se está configurando correctamente, y lo es. También verifiqué la configuración, y ldrtl está configurado. Verifiqué en el archivo apk firmado que android:supportsRtl hizo y ninguno de los archivos de diseño tenía android:layoutDirection="ltr" . Incluso he intentado poner manualmente android:layoutDirection="rtl" para intentar forzar un diseño para que refleje, pero eso tampoco funcionó.

Actualización 3

Agregué otra actividad al proyecto, la convertí en la actividad de inicio y me aseguré de que no estuviera conectada a ningún código existente. Es una subclase de Activity . El problema sigue existiendo. Así que, en teoría, este es un problema de configuración. Como dije, verifiqué el archivo AndroidManifest.xml y todos los archivos de diseño que se generaron, y la compatibilidad con RTL y los cambios en el diseño se lograron. ¿Qué puede salir mal con la configuración?


El error más oscuro nunca. Como mencioné en la pregunta, la mayor parte de este código fue heredado. Terminó siendo un problema de operador bit a bit que estaba arruinando banderas para la aplicación. &= se estaba utilizando en lugar de & para comprobar si se había establecido un indicador.

Como se señaló en los comentarios, el código se tomó de un ejemplo en una publicación del blog de desarrolladores de Android , lo que explica por qué tantos otros se han encontrado con este mismo problema. Presenté un informe de error y la publicación del blog se ha actualizado silenciosamente. Aquí está el código original, que quité &= de. No utilice el siguiente código como está. Necesita cambiar &= a & :

isDebuggable = (appContext.getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE) != 0;


Prueba esto...

  1. Crea una clase para mantener el estado global de la aplicación.

    public class YourGlobalClass extends Application { @Override public void onCreate() { updateLanguage(this, null); super.onCreate(); } public static void updateLanguage(Context ctx, String lang) { Configuration cfg = new Configuration(); LocalSharedManager manager = new LocalSharedManager(ctx); String language = manager.GetValueFromSharedPrefs("force_locale"); if (TextUtils.isEmpty(language) && lang == null) { cfg.locale = Locale.getDefault(); String tmp_locale = ""; tmp_locale = Locale.getDefault().toString().substring(0, 2); manager.SaveValueToSharedPrefs("force_locale", tmp_locale); } else if (lang != null) { cfg.locale = new Locale(lang); manager.SaveValueToSharedPrefs("force_locale", lang); } else if (!TextUtils.isEmpty(language)) { cfg.locale = new Locale(language); } ctx.getResources().updateConfiguration(cfg, null); } }

  2. Especifique la clase global a la etiqueta de su AndroidManifest.xml , lo que hará que esa clase se cree una instancia con la configuración regional guardada, cuando se cree el proceso para su aplicación / paquete. Me gusta, android:name="com.your.package.YourGlobalClass" android:supportsRtl="true"

  3. Crea los siguientes dos métodos en tu MainActivity.java (donde quieras).

    public class MainActivity extends ActionBarActivity{ ....... // Implement OnclickListener for english_locale button findViewById(R.id.english_locale).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { changeEnglish(); } }); // Implement OnclickListener for arabic_locale button findViewById(R.id.arabic_locale).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { changeArabic(); } }); /** * Method that Update UI for Arabic locale. */ public void changeArabic() { new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { String app_locale = "ar"; Locale locale = new Locale(app_locale); Locale.setDefault(locale); //Configuration to query the current layout direction. Configuration config = new Configuration(); config.locale = locale; getResources().updateConfiguration(config, getResources().getDisplayMetrics()); Bidi bidi = new Bidi(app_locale, Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT); bidi.isRightToLeft(); YourGlobalClass.updateLanguage(getActivity(), "ar"); //Refreshing current fragment Intent i = getActivity().getIntent(); startActivity(i); getActivity().finish(); return null; } }.execute(); } /** * Method that Update UI for Default(English) locale. */ public void changeEnglish() { new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { String app_locale = "en"; Locale locale = new Locale(app_locale); Locale.setDefault(locale); //Configuration to query the current layout direction. Configuration config = new Configuration(); config.locale = locale; getResources().updateConfiguration(config, getResources().getDisplayMetrics()); Bidi bidi = new Bidi(app_locale, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT); bidi.isLeftToRight(); YourGlobalClass.updateLanguage(getActivity(), "en"); //Refreshing current fragment Intent i = getActivity().getIntent(); startActivity(i); getActivity().finish(); return null; } }.execute(); } ...... //MainActivity end }

  4. Feliz codificación ...