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


566

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


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


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


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.


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.



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.


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.


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.


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.


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.


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.


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


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.

1

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.