Programáticamente Creado Android ProgressBar (Círculo) Invisible En Xoom (Trabaja en Cualquier Parte!)

El problema

Estoy teniendo un problema extraño que no puedo entender y necesito otros ojos para mirar. He creado dinámicamente una opinión de ProgressBar y trabaja en una variedad de dispositivos y de AVDs excepto mi Motorola Xoom.


Capturas de pantalla

Todas las capturas de pantalla tienen el nombre del dispositivo por encima de ellos y se han reducido en torno al 50% de lo que agarró a través de la ADT, excepto para el Nexus 10, que es el 25% debido a su alta resolución. El fondo rojo para el ProgressBar se agrega para fines de depuración para mostrar que la vista está allí y visible. Agregué el acolchado izquierdo y superior para centrarlo.

Las capturas de pantalla a continuación comienzan con el Xoom donde no funciona y seguido por Nexus 10 (AVD), Nexus 7, Galaxy Nexus y HTC Droid Incredible demostrando que funciona en cualquier otro lugar. Después de los disparos voy a añadir mi código.

Motorola Xoom no funciona

Barra de progreso no funciona! Pero tenga en cuenta que la vista es visible (vemos el fondo rojo).

Motorola Xoom

Funcionando bien en otros dispositivos

El progreso del círculo es visible en todos estos dispositivos.

Simulado Samsung Nexus 10

Simulado Samsung Nexus 10

ASUS Nexus 7

ASUS Nexus 7

Samsung Galaxy Nexus

Samsung Galaxy Nexus

HTC Droid Incredible

HTC Droid Incredible


Ahora el código

Esto crea la vista principal que lo contiene:

RelativeLayout discoverListLayout = new RelativeLayout(mContext); discoverListLayout.setLayoutParams(params); discoverListLayout.addView(mDiscoverList); 

MDiscoverList es una vista de lista que se muestra en última instancia. La ProgressBar se carga en la parte superior hasta que se carga la lista.

Ahora crea y configura la barra de progreso. Configurar el relleno onGlobalLayout porque de lo contrario los objetos tienen 0 ancho y altura.

  mDiscoverLoading = new ProgressBar(mContext); params.height = ViewPager.LayoutParams.WRAP_CONTENT; params.width = ViewPager.LayoutParams.WRAP_CONTENT; mDiscoverLoading.setLayoutParams(params); mDiscoverLoading.setIndeterminate(true); discoverListLayout.addView(mDiscoverLoading); ViewTreeObserver vto = mDiscoverLoading.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @SuppressWarnings("deprecation") @Override public void onGlobalLayout() { if (mDiscoverList.getCount() > 0) { processLoadedList(true); } else { mDiscoverLoading.setBackgroundColor(getActivity().getResources().getColor(R.color.stitchoid_red)); mDiscoverLoading.setPadding((getView().getWidth() / 2) - (mDiscoverLoading.getWidth() / 2),(getView().getHeight() / 2) - (mDiscoverLoading.getHeight()), 0, 0); } ViewTreeObserver obs = mDiscoverLoading.getViewTreeObserver(); obs.removeGlobalOnLayoutListener(this); } }); 

Así que de nuevo todo funciona como un campeón excepto en el Motorola Xoom !? Estaría agradecido por cualquier idea o sugerencia para ayudar a resolver este problema. Por favor, hágamelo saber si debo proporcionar cualquier información adicional.

¡Muchas gracias!

* Adición: Una cosa extraña de la nota que es probablemente no muy relevante pero apenas en caso de que: si fijo el ancho de ProgressBar a match_parent (y no agrega el relleno del ancho) también trabaja en cualquier parte pero entonces en el Xoom demuestra pero Está distorsionada ya que se extiende hasta el ancho (sólo xoom).

Honestamente no sé cómo o por qué haría una diferencia.

Pero intente usar RelativeLayout.CENTER_IN_PARENT para obtener su ProgressBar en el centro de la pantalla, en lugar de configurar manualmente el relleno superior e izquierdo para que sea la mitad del tamaño de la pantalla.

Así que en lugar de:

 mDiscoverLoading.setPadding((getView().getWidth() / 2) - (mDiscoverLoading.getWidth() / 2),(getView().getHeight() / 2) - (mDiscoverLoading.getHeight()), 0, 0); 

utilizar

 LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); lp.addRule(RelativeLayout.CENTER_IN_PARENT); mDiscoverLoading.setLayoutParams(lp); 

Tenga en cuenta que hay varias "versiones" diferentes del objeto LayoutParams, debe asegurarse de que RelativeLayout.LayoutParams es el que importa ya que su padre es un RelativeLayout en este caso.

Realmente no podría decirte lo que está causando el relleno para ser buggy en el Xoom, pero esta es una manera alternativa que usted puede conseguir el ProgressBar al centro, que parece no ser afectado por cualquier error que está causando el problema en el Xoom

  • Base64 Error: El contenido de la imagen no es válido base64 data java
  • El niño especificado ya tiene un padre. Debe llamar a removeView () en el primer padre del niño (Android)
  • Android: Formato de cadena con doble valor
  • android ImageView en ViewPager - implementar el gesto táctil zoom de la imagen
  • Diferencia entre los conceptos
  • Cómo simular la muerte de la aplicación de Android GC
  • Gson serializar a LinkedTreeMap en lugar de mi Entidad
  • Cómo crear una sugerencia útil en Android
  • ¿Es necesario mantener las clases del mismo paquete en el mismo dex mientras se utilizan múltiples archivos dex
  • Música de backround de Android a través de múltiples actividades; Cómo presionar el botón Inicio
  • Captura de doble taps en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.