Структура фрагмента продолжает расти вверх и вниз, когда активен основной поток действий

Очень странная проблема. Я создал основной макет с фиксированной панелью инструментов и вставил фрагмент-заполнитель прямо под ним. Раскладка держится вместе и работает отлично, в комплекте с поворотом экрана, изменением размера софт-клавиатуры, вводом и т. Д.

Основная структура макета:

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"...

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"...

        <include layout="@layout/global_header"/>

        <fragment 
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

</android.support.constraint.ConstraintLayout>

Код:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);

    if (savedInstanceState != null) {
        ...
    } else {
        Fragment newFragment = new fragment_code();
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(R.id.fragment_frame, newFragment).commit();
    }


    final TextView g_header_date = (TextView) findViewById(R.id.global_header_date);
    final TextView g_header_time = (TextView) findViewById(R.id.global_header_time);

    Thread headerClock = new Thread() {
        SimpleDateFormat header_date = new SimpleDateFormat("EEE, dd MMM yyyy");
        SimpleDateFormat header_time = new SimpleDateFormat("hh:mm aa");

        @Override
        public void run() {
            try {
                while (!isInterrupted()) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Date dt = new Date();
                            g_header_date.setText("Date:  " + header_date.format(dt));
                            g_header_time.setText("Time:  " + (header_time.format(dt)).replace(".", ""));
                        }
                    });
                    Thread.sleep(1000);
                }
            } catch (InterruptedException e) {
                // ...
            }
        }
    };

    //headerClock.start();

}

public static class fragment_code extends Fragment implements View.OnClickListener {

    @Override
    public View onCreateView(LayoutInflater inflater,
      ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_layout, container, false);
    }

    @Override
    public void onClick(View v) {

    }
}

Но если я раскомментирую headerClock.start(), фрагмент (розовая область) будет прыгать вверх и вниз до отметки таймера.

Панель инструментов является частью основного макета, но разделяет вертикальный линейный макет с фрагментом, чтобы они занимали весь экран.

Кто-нибудь может иметь какие-либо идеи?

РЕДАКТИРОВАТЬ: Открытие и закрытие программной клавиатуры останавливает прыжки.

1 ответ

Привет @iSofia проблема может быть в том, что вы установили wrap_content имеет высоту до панели инструментов, а фрагмент находится под ней. Таким образом, при изменении времени высота панели инструментов должна меняться с небольшим запасом, чтобы сопровождать различную высоту чисел, и поэтому фрагмент перемещается вверх и вниз.

Возможное решение состоит в том, чтобы установить фиксированную высоту для вашего глобального заголовка / панели инструментов, чтобы она не меняла свою высоту при каждом изменении.

Надеюсь, это поможет вам.

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