Есть ли способы поместить представление немного за пределы родительского макета?

Это вопрос о макетах Android. Вот что яeagerly хочу получить:

Layout

Темно-серый это LinearLayout. Оранжевый - это макет X, а затем зеленый - это FrameLayout. Мне нужно поместить Green вне его родительского макета X. Описанная иерархия компоновки не может быть изменена. Единственный вариант - макет X - это может быть все, что вы хотите.

Есть идеи?

 Gophermofur03 мая 2012 г., 15:42
Я думаю, что вы можете указать отрицательные значения для полей. Вы пробовали это? Я думаю, что это работает для макетов, где вы можете иметь перекрытие (два объекта на холсте, например). Я не нахожусь рядом с каким-либо редактором, в противном случае я бы попробовал это сам. Я точно знаю, что вы можете иметь перекрытие, если весь макет является канвой, но я не уверен в вашей ситуации.
 Andrey Agibalov03 мая 2012 г., 16:14
@Barak: в основном это таблица (строка таблицы на рисунке), и в некоторых случаях мне нужно переместить одну ячейку за пределы ее нормального положения, поэтому макеты Table / TableRow - это единственное, что я могу использовать.
 Andrey Agibalov03 мая 2012 г., 16:14
@ Gofermofur: уже пробовал, это не работает. Дочернее представление либо обрезается, либо заполняет весь родительский элемент (в зависимости от android родителя: clipChildren)
 Gophermofur03 мая 2012 г., 16:20
Да, я подумал, что это будет так. К сожалению, похоже, что зеленая часть должна быть частью родительского контейнера (Dark Grey), но LinearLayout не будет работать, чтобы получить то, что вам нужно.
 Barak03 мая 2012 г., 15:36
Ненавижу это говорить, но единственный способ, которым я могу придумать, - это использовать FrameLayout, чтобы обернуть все, иметь темно-серый и оранжевый в линейном макете, а затем наложить зеленый макет поверх остальных. Что противоречит вашей "описанной иерархии макетов" не может быть изменено ". Просто из любопытства, почему это не так?

Ответы на вопрос(2)

android:clipChildren="false"
android:clipToPadding="false"

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

 02 февр. 2017 г., 12:33
Пятно на! ура
 06 апр. 2018 г., 01:51
красивый, работает как шарм ... вам нужно поместить эти атрибуты на каждого родителя представления.
 19 мар. 2017 г., 13:57
Кажется, это не работает для меня
 05 окт. 2016 г., 20:31
Отрицательная маржа - победитель!
 20 мар. 2017 г., 15:02
@Denny - К сожалению, по моему опыту и другим прочтениям, клип, кажется, работает по-разному в зависимости от версии для Android (Почему? Я не знаю. Может быть, Google заставит все работать последовательно когда-нибудь), так что это не всегда может быть решением, которое ищут за.
Решение Вопроса

потому что она не может быть нарисована вне ее родителей.

Итак, вы должны реализовать RelativeLayout или FrameLayout (корневой макет) в качестве родителей всех этих представлений.

И поместите зеленый вид как дочерний вид корневого макета.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout_root"
    android:layout_width="fill_parent"
    android:layout_height="200dp"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/layout_dark_grey"
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/layout_orange"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_toRightOf="@id/layout_dark_grey"
        android:orientation="vertical" >
    </LinearLayout>

    <RelativeLayout
        android:id="@+id/layout_green"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="300dp" >
    </RelativeLayout>

</RelativeLayout>
 Andrey Agibalov03 мая 2012 г., 21:56
Я знаю, что есть способы достичь этого, используя более подходящие макеты вместо тех, которые я использую. Мне все еще любопытно, есть ли способ сделать это в моем случае.

Ваш ответ на вопрос