Подтвердить что ты не робот

Android child view игнорировать родительское дополнение

У меня много макетов, которые имеют разные корни ViewGroup (LinearLayouts, RelativeLayouts и т.д.). Эти представления все работают так, как я ожидаю, но теперь я пытаюсь добавить верхнюю панель навигации. Проблема в том, что корни могут иметь разные paddings, и если я просто включу свой макет в каждый из этих макетов, панель навигации ограничена по ширине родительским дополнением. Я бы хотел, чтобы эта панель навигации игнорировала корневую левую/правую/верхнюю прописку и полностью полную ширину на самой верхней части макета. Есть ли что-то, что я могу сделать в макете панели навигации, чтобы достичь этого, или я обречен на изменение всех существующих макетов, чтобы это учесть?

4b9b3361

Ответ 2

Пока это кажется очень плохой идеей, вы можете выполнить то, что вы ищете, установив атрибут clipToPadding родительской ViewGroup в значение false, а затем установите отрицательные поля в дочернем представлении.

Пример:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:background="#EEE"
    android:clipToPadding="false">
    <TextView  
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
        android:background="#333"
        android:layout_marginLeft="-10dp"
        android:layout_marginRight="-10dp"
        android:layout_marginTop="-10dp"/>
</LinearLayout>

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

Ответ 3

Зачем вам нужно менять все ваши макеты? Если это только ваша панель навигации, которая должна игнорировать отступы, вы можете просто вывести на панель навигации из нее текущий родительский макет, а затем поместить оба макета внутри другого макета, который не имеет прокладки.