Jelly Bean android.R.id.content изменился?

Недавно я протестировал свое приложение на устройстве Jelly Bean и заметил, что мой код уклонения панели действий больше не работает.

У меня есть прозрачная панель действий с параметром OverlayMode true, но я хочу, чтобы панель действий работала как сплошная панель действий на некоторых экранах.

Чтобы это работало, я позаимствовал код из галереи Honeycomb Код

В основном я проверяю высоту Acionbar и устанавливаю topMargin ведра android.R.id.content на это значение.

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

      }

В Jelly Beans эта стратегия почему-то больше не работает. Возможно, Jelly Bean изменил контейнер id.content?


person Michele    schedule 26.07.2012    source источник


Ответы (1)


Хорошо, отвечая на мой собственный вопрос здесь. Сначала у меня была опечатка в моем коде:

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

Но настоящая проблема заключалась в том, что

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

обеспечить просмотр всего экрана, включая панель состояния. Только на Android 4.1 Jelly Bean

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

дает RootContentView, который нужно поместить под прозрачную панель действий.

person Michele    schedule 31.07.2012