Intereting Posts
Использование ProgressDialog в ActionBar (Android) Пакет com.google.zxing отсутствует в библиотеке штрих-кода Zxing для Android Неправильные временные метки представления при обратном просмотре через видео MP4 При использовании clipToPadding в ListView элементы перерабатываются преждевременно Android отменить все будильника Как использовать DatePickerDialog как предпочтение Как перетащить элемент из списка и отбросить его на внешнем textView? В сообщении Android Studio «Paint.setShadowLayer .. графика не точная ..» без этого кода Создайте DummyActivity внутри папки androidTest для тестирования Просмотр EditText только с номером клавиатуры Какова максимальная длина конкатенированных смс в smpp? Android Studio не удалось найти версию, совместимую с com.android.support:appcompat-v7:23.+ Как автоматически принимать Wi-Fi Прямые запросы на подключение в Android Как я могу сделать свой ArrayAdapter следующим за шаблоном ViewHolder? Операция обновления в Realm

Как обновить match_parent в linearLayout после использования setRotation?

У меня есть несколько вложенных макетов, которые я пытаюсь повернуть на 90 градусов по запросу в коде. У меня есть функция setRotation, которая работает отлично, но, к сожалению, с вращением не меняется. Ширина на этих элементах установлена ​​в match_parent, а после вращения она по-прежнему соответствует родительской ширине, а не родительской высоте, которую должна соответствовать.

XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mainLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="link.basiclifecounter.LifeCounter" android:background="#CC00CC"> <LinearLayout android:id="@+id/topPlayers" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" android:orientation="vertical" android:background="#CC0000"> <RelativeLayout android:id="@+id/p3" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> **A bunch of stuff in here** </RelativeLayout> <RelativeLayout android:id="@+id/p2" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> **A bunch of stuff in here** </RelativeLayout> </LinearLayout> <LinearLayout android:id="@+id/bottomPlayer" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="vertical" android:background="#00CC00"> <RelativeLayout android:id="@+id/p1" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> **A bunch of stuff in here** </RelativeLayout> </LinearLayout> </LinearLayout> 

Вращающийся Java-код

 view.findViewById(R.id.topPlayers).setRotation(90); //Rotate the entire top box view.findViewById(R.id.p3).setRotation(180); //Flip one side so both players face outwards 

На этом снимке отображается изображение до начала вращения.

На этом снимке отображается изображение после поворота.

Как вы можете видеть, вся коробка была повернута после того, как высота и ширина уже установлены. В невращающейся версии ширина (match_parent) должна быть полной, а высота (layout_weight = 2) должна быть 2 / 3rds экрана. Это работает отлично. Проблема в том, что он вращается, эти размеры остаются неизменными, а не адаптируются и меняются на новое вращение.

Я выбрал яркие цвета фона, чтобы помочь устранить неполадки, что Pink, который вы видите, находится в главном LinearLayout, а не в любом из макетов, которые вращаются.

Я попытался включить вращение в самом XML, а не внутри кода, и получил то же самое, что и изображение после снимка, поэтому я явно не понимаю, как получить ширину макета так, как я хочу. Могу ли я просто не использовать layout_weight эффективно с вращением?

Solutions Collecting From Web of "Как обновить match_parent в linearLayout после использования setRotation?"

Я думаю, что у вас такая же проблема, как и в этом вопросе переполнения стека . Похоже, что ротация просто не учитывается для целей макета. Другими словами, происходит компоновка, тогда вращение происходит с представлениями, изложенными перед вращением.

Этот ответ на тот же вопрос может вам помочь.

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


Вы можете загрузить альтернативный макет, который будет вести себя так, как вам хочется, вместо того, чтобы делать поворот. (См. Макет и изображение ниже.) Вы также можете добиться того же результата, изменяя параметры макета программно.

Вот проект GitHub, который демонстрирует вращение программно. Вид поворачивается после паузы в течение трех секунд.

Надеюсь, вы найдете это полезным.

Введите описание изображения здесь

alternate.xml

  <LinearLayout android:id="@+id/topPlayers" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2" android:background="#CC0000" android:orientation="horizontal"> <RelativeLayout android:id="@+id/p3" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:orientation="vertical" android:rotation="90"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="p3" android:textSize="48sp" /> </RelativeLayout> <RelativeLayout android:id="@+id/p2" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="#0000CC" android:gravity="center" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:rotation="-90" android:text="p2" android:textSize="48sp" /> </RelativeLayout> </LinearLayout> <LinearLayout android:id="@+id/bottomPlayer" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="#00CC00" android:orientation="vertical"> <RelativeLayout android:id="@+id/p1" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="p1" android:textSize="48sp" /> </RelativeLayout> </LinearLayout>