У меня есть два LinearLayout в которых есть несколько textView, первое поле имеет определённый размер. Есть ли возможность по заполнению первого поля, переносить textView во второе поле?
UPD: На основе предложенного варианта реализовал такой метод:
public void changeParent(TextView tv){
FrameLayout flCoverBook = findViewById(R.id.flCoverBook);
LinearLayout llTextView1 = findViewById(R.id.llTextView1);
if (llTextView1.getHeight() <= flCoverBook.getHeight()) {
((LinearLayout) tv.getParent()).removeView(tv);
((LinearLayout) findViewById(R.id.llTextView1)).addView(tv);
contentFrameLayout.invalidate();
}
}
Но при использовании он не отработал так необходимо, так как после добавления textView в поле (layout) размер поля оставался прежним, пробовал обновлять его разными методами:
llTextView1.removeAllViews();
llTextView1.requestLayout();
llTextView1.invalidate();
contentFrameLayout.invalidate()l;
lTextView1.refreshDrawableState();
Даже прибегал к достаточно специфичным:
lTextView1.setVisibility(View.GONE);
lTextView1.setVisibility(View.VISIBLE);
lTextView1.removeAllViews();
lTextView1.refreshDrawableState();
и т.д.
Одним реальным решением нашёл вариант получения размера поля, затем с каждым добавленным textView добавлять его размер (высоту). Но такой подход не учитывает количество строк занимаемым textView и это в принципе костыль чем реальная реализация.
Заполнение полей выполняется по callback-у и экран обновляется методом:
contentFrameLayout.invalidate();
После всех этих манипуляций у меня сложилось впечатление, что с элементами на экране можно работать только после его заполнения и визуализации, а не в момент заполнения.
Если я правильно понял ваш вопрос: напишите функцию, которая будет вызываться каждый раз при изменении текста в TextView
:
void changeParent(TextView tv){
if (tv.getText().length()>limit) {
//или
if (tv.getHeight()>img.getHeight()) {
((LinearLayout) tv.getParent()).removeView(tv);
((LinearLayout) findViewById(R.id.secondLL)).addView(tv);
}
}
И передавайте туда ваш TextView
.
((LinearLayout) tv.getParent())
и ((LinearLayout) findViewById(R.id.secondLL))
можно определить в переменные заранее.
Либо, напишите кастомный TextView
, в котором на setText(...)
эта функция будет вызываться через interface
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
День добрыйВозникла необходимость создания планировщика заданий
Тестирую метод 1В методе 1 есть статический вызов метода 2 на объекте другого класса
Как протестировать работу кнопок с помощью Espresso,когда они создаются программно и их не запустить с помощью resource idC помощью classname так же не проверить...
Проблемы с пониманием работы ArrayDeque, а именно с заданием размерности