getHeight() представления дает одинаковый результат для портрета и пейзажа в Android

Для моего приложения я использую аккордовую раскладку, в которой у меня есть три панели, и я пытаюсь установить размеры панелей (texview), соответствующие размеру высоты устройства. Это не работает, когда есть изменение ориентации экрана. Размер моего вида не меняется в зависимости от высоты устройства, когда оно находится в альбомной ориентации. Пожалуйста, помогите мне в этом.

Это мой код

if(layoutView.getId() == R.id.Advertitletext)
{
    openLayout = panel1;
    v = panel1.getVisibility();

    hideThemAll();
    if(v != View.VISIBLE)
    {
        panel1.setVisibility(View.VISIBLE);
        params = advertoutput.getLayoutParams();
        params.height = parentLinear.getHeight()-msgrecvtitle.getHeight()-msgsenttitle.getHeight()-mLogCheck.getHeight()-PearActivity.peartabs.getHeight();
        advertoutput.setLayoutParams(params);
    }

}

это мой метод onConfiguration()

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        ViewTreeObserver observer = parentLinear.getViewTreeObserver();
        observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

            @Override
            public void onGlobalLayout() {

                parentLinear.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                if(openLayout==panel1){
                    params = advertoutput.getLayoutParams();
                    params.height = parentLinear.getHeight()-msgrecvtitle.getHeight()-msgsenttitle.getHeight()-mLogCheck.getHeight()-PearActivity.peartabs.getHeight();
                    advertoutput.setLayoutParams(params);
                }
                else if(openLayout == panel2){
                    params = msgrecvoutput.getLayoutParams();
                    params.height = parentLinear.getHeight()-adverttitle.getHeight()-msgsenttitle.getHeight()-mLogCheck.getHeight()-PearActivity.peartabs.getHeight();
                    msgrecvoutput.setLayoutParams(params);

                }else   if(openLayout == panel3){
                    params = msgsentoutput.getLayoutParams();
                    params.height = parentLinear.getHeight()-adverttitle.getHeight()-msgrecvtitle.getHeight()-mLogCheck.getHeight()-PearActivity.peartabs.getHeight();
                    msgsentoutput.setLayoutParams(params);
                }

            }
        });

    }

1 ответ

Если вы включите в свой AndroidManifest файл, который вам нужен для обработки изменений ориентации:

android:configChanges="orientation"

Вы должны реализовать свой код внутри onConfigurationChanged()иначе оно должно быть внутри onResume() (поскольку действие приостановлено, затем возобновлено, и onCreate больше не вызывается.

Другие вопросы по тегам