2012-08-28 17 views
14

Od kilkukrotnie pole autouzupełniania Eclipse proponuje android: paddingStart android: paddingStop podczas pisania plików układu XML.Co to są paddingStart i paddingEnd?

Nie bardzo rozumiem, co te atrybuty mają robić.

Dokumentacja zaćmienie/javadoc nie jest bardzo pomocne: Sets the padding, in pixels, of the start edge; see padding. i dokumentacji online nie ma żadnego odniesienia do tych atrybutów: http://developer.android.com/reference/android/view/View.html

Czy możesz mi wyjaśnić?

Odpowiedz

27

Po przeczytaniu kodu źródłowego Androida (View.java) wydaje się, że paddingStart i paddingEnd pomagają zadbać o kierunek liter (od lewej do prawej od prawej do lewej) określony przez użytkownika.

W ten sposób paddingStart interpretowany jest jako paddinfLeft w językach LTR i paddingRight w językach RTL.

źródłowy kod z View.java (Android 4.0.1):

switch (getResolvedLayoutDirection()) { 
     case LAYOUT_DIRECTION_RTL: 
      // Start user padding override Right user padding. Otherwise, if Right user 
      // padding is not defined, use the default Right padding. If Right user padding 
      // is defined, just use it. 
      if (mUserPaddingStart >= 0) { 
       mUserPaddingRight = mUserPaddingStart; 
      } else if (mUserPaddingRight < 0) { 
       mUserPaddingRight = mPaddingRight; 
      } 
      if (mUserPaddingEnd >= 0) { 
       mUserPaddingLeft = mUserPaddingEnd; 
      } else if (mUserPaddingLeft < 0) { 
       mUserPaddingLeft = mPaddingLeft; 
      } 
      break; 
     case LAYOUT_DIRECTION_LTR: 
     default: 
      // Start user padding override Left user padding. Otherwise, if Left user 
      // padding is not defined, use the default left padding. If Left user padding 
      // is defined, just use it. 
      if (mUserPaddingStart >= 0) { 
       mUserPaddingLeft = mUserPaddingStart; 
      } else if (mUserPaddingLeft < 0) { 
       mUserPaddingLeft = mPaddingLeft; 
      } 
      if (mUserPaddingEnd >= 0) { 
       mUserPaddingRight = mUserPaddingEnd; 
      } else if (mUserPaddingRight < 0) { 
       mUserPaddingRight = mPaddingRight; 
      } 
    } 
+3

Należy również pamiętać, że nie wydają się one publiczne. Przynajmniej Eclipse nie skompiluje ich dla mnie. – Timmmm

+1

@Timmmm musi mieć ustawiony cel na api 17+, aby mógł się skompilować. – schwiz

+1

@schwiz api 17 nie był w tej chwili dostępny. Ale teraz możesz ustawić poziom api na 17, aby móc korzystać z tych pól. – Mathieu

0

Podczas pracy z czytania i to zdaję sobie sprawę, że jest paddingStart i paddingEND i nie paddingSTOP (chociaż ten element istnieje).