Pregunta

Hace poco probé mi aplicación en un dispositivo de frijol de jalea y noté que mi código de esquivar de la barra de acción ya no funciona.

Tengo una barra de acción transparente con el código de superposición verdadero, pero desea comportar la barra de acción como una barra de acción sólida en algunas de mis pantallas.

Para hacer de este trabajo, he tomado prestado algún código de la galería de panal código

Básicamente, verifico la altura de ACIONBAR y configure el Topmargin del cubo Android.R.ID.content a este valor.

  public void setupActionbar() {
    final int sdkVersion = Build.VERSION.SDK_INT;
    int barHeight = getSupportActionBar().getHeight();
      if (sdkVersion < Build.VERSION_CODES.HONEYCOMB) {
        FrameLayout content = (FrameLayout) findViewById(android.R.id.content);
        RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) content.getLayoutParams();

        if (params.topMargin != barHeight) {
          params.topMargin = barHeight;
          content.setLayoutParams(params);
        }

        if (!getSupportActionBar().isShowing()) {
          params.topMargin = 0;
          content.setLayoutParams(params);
        }
      } else {
        FrameLayout content = (FrameLayout) findViewById(android.R.id.content);
        LayoutParams params = content.getLayoutParams();
        if (params instanceof RelativeLayout.LayoutParams) {
          android.widget.RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) params;
          if (lp.topMargin != barHeight) {
            lp.topMargin = barHeight;
            content.setLayoutParams(lp);
          }

          if (!getActionBar().isShowing()) {
            lp.topMargin = 0;
            content.setLayoutParams(lp);
          }
        } else if (params instanceof FrameLayout.LayoutParams) {
          FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) params;
          if (lp.topMargin != barHeight) {
            lp.topMargin = barHeight;
            content.setLayoutParams(params);
          }

          if (!getActionBar().isShowing()) {
            lp.topMargin = 0;
            content.setLayoutParams(params);
          }
        }

      }

En jalea, esta estrategia ya no funciona por alguna razón.¿Cambió la frijol de jalea el contenedor de identificación de ID.content?

¿Fue útil?

Solución

OK respondiendo a mi propia pregunta aquí. Primero tuve un error tipográfico en mi código:

content.setLayoutParams(params); should read
content.setLayoutParams(lp);

Pero el problema real fue que

FrameLayout content = (FrameLayout) findViewById(android.R.id.content);

Proporcionar la vista de toda la pantalla, incluida la barra de estado . solo en Android 4.1 Jelly Bean

View content = ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);

Da el rootcontentview que debe ser empujado bajo la barra de acción transparente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top