Структура фрагмента продолжает расти вверх и вниз, когда активен основной поток действий
Очень странная проблема. Я создал основной макет с фиксированной панелью инструментов и вставил фрагмент-заполнитель прямо под ним. Раскладка держится вместе и работает отлично, в комплекте с поворотом экрана, изменением размера софт-клавиатуры, вводом и т. Д.
Основная структура макета:
<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
имеет высоту до панели инструментов, а фрагмент находится под ней. Таким образом, при изменении времени высота панели инструментов должна меняться с небольшим запасом, чтобы сопровождать различную высоту чисел, и поэтому фрагмент перемещается вверх и вниз.
Возможное решение состоит в том, чтобы установить фиксированную высоту для вашего глобального заголовка / панели инструментов, чтобы она не меняла свою высоту при каждом изменении.
Надеюсь, это поможет вам.