Question

J'ai récemment testé mon application sur un appareil de haricot de gelée et remarqua que mon code d'introduction de la barre d'action ne fonctionne plus.

J'ai une barre d'action transparente avec supermode TRUE, mais souhaitez vous comporter de la barre d'action comme une barre d'action solide dans certains de mes écrans.

Pour faire ce travail, j'ai emprunté du code de la galerie d'abeilles code

fondamentalement, je vérifie la hauteur de l'acionbar et définissez le godet TopMargin du godet Android.R.ID.Content sur cette valeur.

  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);
          }
        }

      }

dans les haricots de la gelée Cette stratégie ne fonctionne plus pour une raison quelconque.Jelly Bean a-t-il changé le conteneur ID.Content perhabs?

Était-ce utile?

La solution

OK répondant à ma propre question ici. J'ai d'abord eu une faute de frappe dans mon code:

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

Mais le vrai problème était que

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

fournir la vue de l'écran entier, y compris la barre d'état . uniquement sur Android 4.1 Jelly Bean

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

donne la RootContentView qui doit être poussée sous la barre d'action transparente.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top