Różnica między dopełnieniem widoku a marginesem

566

Jaka jest różnica między marginesem widoku a wypełnieniem?

Ragunath Jawahar
źródło
10
Wypełnienie znajduje się wewnątrz granicy, margines jest na zewnątrz. Szczegółowe informacje można znaleźć w modelu W3C Box . Ten post na blogu jest jednak znacznie bardziej czytelny :-)
Aaron Digulla,
2
Może to być pomocne Deklarowanie układu
Sharique Abdullah,
3
to jest to samo co HTML, zobacz tutaj więcej stackoverflow.com/questions/2189452/...
Scott
Zobacz moją odpowiedź na podobne pytanie stackoverflow.com/questions/21959050/...
Eugene Brusov

Odpowiedzi:

568

Aby pomóc mi zapamiętać znaczenie wyściółki , myślę o dużym płaszczu z dużą ilością grubej bawełnianej wyściółki . Jestem w płaszczu, ale ja i mój wyściełany płaszcz jesteśmy razem. Jesteśmy jednostką.

Ale żeby zapamiętać margines , myślę: „ Hej, daj mi margines! ” To pusta przestrzeń między mną a tobą. Nie wchodź do mojej strefy komfortu - mój margines.

Aby to wyjaśnić, oto zdjęcie wypełnienia i marginesu w TextView:

wprowadź opis zdjęcia tutaj

Układ XML dla powyższego obrazu

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="#c5e1b0"
        android:textColor="#000000"
        android:text="TextView margin only"
        android:textSize="20sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="#f6c0c0"
        android:textColor="#000000"
        android:text="TextView margin only"
        android:textSize="20sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#c5e1b0"
        android:padding="10dp"
        android:textColor="#000000"
        android:text="TextView padding only"
        android:textSize="20sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#f6c0c0"
        android:padding="10dp"
        android:textColor="#000000"
        android:text="TextView padding only"
        android:textSize="20sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="#c5e1b0"
        android:textColor="#000000"
        android:padding="10dp"
        android:text="TextView padding and margin"
        android:textSize="20sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="#f6c0c0"
        android:textColor="#000000"
        android:padding="10dp"
        android:text="TextView padding and margin"
        android:textSize="20sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#c5e1b0"
        android:textColor="#000000"
        android:text="TextView no padding no margin"
        android:textSize="20sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#f6c0c0"
        android:textColor="#000000"
        android:text="TextView no padding no margin"
        android:textSize="20sp" />

</LinearLayout>

Związane z

Suragch
źródło
577

Wypełnienie to przestrzeń wewnątrz ramki, między ramką a rzeczywistą zawartością widoku. Pamiętaj, że wypełnienie całkowicie obejmuje całą zawartość: wypełnienie znajduje się na górze, dole, prawej i lewej stronie (które mogą być niezależne).

Marginesy to spacje poza granicą, między granicą a innymi elementami obok tego widoku. Na obrazie margines jest szarym obszarem poza całym obiektem. Pamiętaj, że podobnie jak wypełnienie, margines jest całkowicie wokół zawartości: marginesy znajdują się na górze, dole, prawej i lewej stronie.

Obraz mówi więcej niż 1000 słów (wyodrębnionych z Margin Vs Padding - CSS Properties ):

alternatywny tekst

Cristian
źródło
54
Odpowiedź dotyczy HTML / CSS, pytanie dotyczyło Androida. Model widoku Androida jest inspirowany HTMLem, ale nie identyczny. Po pierwsze, granica nie jest tam znacznym obiektem pierwszej klasy.
Seva Alekseyev
48
UWAGA: W systemie Android właściwość layout_width obejmuje zawartość i dopełnienie. (W HTML właściwość css width odnosi się tylko do szerokości treści.) Jak powiedział Seva, Android nie ma wbudowanej koncepcji granic. Do dodania obramowania w Androidzie możesz użyć tła z 9 łatkami PNG lub wektorowego formatu XML.
SharkAlley
12
Warto również zauważyć, że tło jest modyfikowane w oparciu o margines, ale nie wypełnienie (w Androidzie).
ArtOfWarfare
W Androidzie tak zwane „obramowanie” to tak naprawdę „widok pojemnika”. Powinno to wyjaśnić trochę, co mam nadzieję.
The Hungry Androider
75

Wypełnienie znajduje się w widoku.

Margines jest poza widokiem.

Ta różnica może mieć znaczenie dla właściwości tła lub rozmiaru.

Floern
źródło
41

Wypełnienie jest w widoku, margines jest na zewnątrz. Wypełnienie jest dostępne dla wszystkich widoków. W zależności od widoku może istnieć wizualna różnica między dopełnieniem a marginesem.

Na przykład w przypadku przycisków charakterystyczny obraz tła przycisku zawiera dopełnienie, ale nie margines. Innymi słowy, dodanie większej ilości dopełnienia powoduje, że przycisk wygląda wizualnie na większy, a dodanie większego marginesu po prostu powiększa odstęp między przyciskiem a następnym kontrolem.

Natomiast w przypadku TextViews efekt wizualny wypełnienia i marginesu jest identyczny.

To, czy margines jest dostępny, zależy od kontenera widoku, a nie od samego widoku. W LinearLayoutmarginesie jest obsługiwany, w AbsoluteLayout(obecnie uważany za przestarzały) - nie.

Seva Alekseyev
źródło
25

Poniższy obraz pozwoli ci zrozumieć wypełnienie i margines

wprowadź opis zdjęcia tutaj

Akshay Paliwal
źródło
8

Wypełnienie oznacza odstęp między widgetem a oryginalną ramką widgetu. Ale margines to odstęp między oryginalną ramką widgetu a granicami ramki innej widgetu. wprowadź opis zdjęcia tutaj.

akn
źródło
7

Wypełnienie to przestrzeń wewnątrz granicy między ramką a rzeczywistą zawartością obrazu lub komórki. Marginesy to spacje poza granicą, między granicą a innymi elementami obok tego obiektu.

radża
źródło
7

Czasami możesz osiągnąć ten sam wynik, grając tylko z marginesem wypełnienia LUB. Przykład:

Powiedz, że widok X zawiera widok Y (alias: widok Y znajduje się w widoku X).

-Widok Y z marginesem = 30 LUB Widok X z dopełnieniem = 30 osiągnie ten sam wynik: Widok Y będzie miał przesunięcie 30.

Akli
źródło
7

Wyściółka
wyściółka jest wewnątrz przykład View.For jeśli dasz android:paddingLeft=20dp, to elementy wewnątrz widoku zorganizuje z 20dpszerokości od left.You mogą również korzystać paddingRight, paddingBottom, paddingTopktóre mają dać wyściółkę z prawej, na dole i górze odpowiednio.

Margines
Margines jest poza View. Na przykład, jeśli dasz android:marginLeft=20dp, widok zostanie ułożony później 20dpod lewej.

Jinosh
źródło
3

Załóżmy, że masz przycisk w widoku, a rozmiar widoku to 200 na 200, a rozmiar przycisku to 50 na 50, a tytuł przycisku to HT. Teraz różnica między marginesem a dopełnieniem polega na tym, że można ustawić margines przycisku w widoku, na przykład 20 od lewej, 20 od góry, a dopełnienie dostosuje pozycję tekstu w widoku przycisku lub widoku itp. , wartość dopełniania wynosi 20 od lewej, więc dopasuje pozycję tekstu.

Steve
źródło
2

Margines odnosi się do dodatkowej przestrzeni poza elementem. Wypełnienie odnosi się do dodatkowej przestrzeni w elemencie. Margines to dodatkowa przestrzeń wokół kontrolki. Wypełnienie to dodatkowa przestrzeń wewnątrz kontrolki.

Trudno dostrzec różnicę z marginesem i wypełnieniem białym wypełnieniem, ale dzięki kolorowemu wypełnieniu widać to dobrze.

Pawan Kumar Singh
źródło
2

Oprócz wszystkich poprawnych odpowiedzi powyżej, jeszcze jedną różnicą jest to, że wypełnienie zwiększa klikalny obszar widoku, podczas gdy marginesy nie . Jest to przydatne, jeśli masz mały klikalny obraz, ale chcesz, aby moduł obsługi kliknięć wybaczył.

Na przykład, zobacz ten obraz mojego układu z ImageView(ikona Android) gdzie ustawić paddingBottonsię 100dp(obraz jest zapas wyrzutnia mipmapa ic_launcher). Dzięki dołączonemu modułowi obsługi kliknięć udało mi się kliknąć na zewnątrz i pod obrazem, a mimo to zarejestrować kliknięcie.

wprowadź opis zdjęcia tutaj

scorpiodawg
źródło
Praktyczna i przydatna wskazówka!
navylover
2

W prostych słowach:

  1. Wypełnienie - tworzy przestrzeń wewnątrz granicy widoku.
  2. Margines - tworzy przestrzeń poza granicą widoku.
mohammed nathar
źródło
1

Krótko mówiąc:
wypełnienie zmienia rozmiar pudełka (z czymś).
margines zmienia odstęp między różnymi polami


źródło