2015-12-09 4 views
0

Я боролся с положением своего FAB и в этот момент по неизвестной причине (для меня) кнопка расположена сверху слева, когда она подходила к нижнему уровню ,FAB-кнопка в неправильном положении

Это мой код:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/l_gray" 
android:weightSum="1"> 

<ListView 
    android:id="@+id/lv_vehiculos" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" 
    android:layout_margin="0dp" 
    android:divider="@color/transparent" 
    android:dividerHeight="15dp" 
    android:layout_weight="0.83" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentBottom="true" /> 

<android.support.design.widget.FloatingActionButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|end" 
    android:layout_margin="16dp" 
    android:layout_marginBottom="0dp" 
    android:clickable="true" 
    android:src="@drawable/icon_white_plus" 
    app:backgroundTint="@color/s_gray" 
    app:borderWidth="0dp" 
    app:elevation="2dp" 
    android:id="@+id/view" /> 

И это результат.

FAB missplaced

ответ

0

Относительное расположение и его дети не могут использовать вес макета и weightsum атрибуты и его поведение. Также прямые дочерние элементы относительной компоновки не имеют атрибута тяжести макета, так что любое поведение, которое вы ожидаете от этих атрибутов, не работает

Итак, чтобы получить фабрику внизу справа, вам необходимо использовать атрибуты позиционирования, используемые внутри относительный макет, поэтому, если вы должны включить атрибут android:layout_alignParentBottom для FAB, установив его значение true, тогда кнопка будет перемещаться в нижнюю часть, а затем, если вы также включите атрибут для FAB, установив его на true, тогда кнопка будет придерживаться на правый конец родительского относительного макета, таким образом, вы успешно разместили свою кнопку в правом нижнем углу вашего релятивирования (родителя).

Но в вашем случае гораздо проще было бы изменить корень relativelayout на linearlayout, так как из того, что я могу в вашем xml, совершенно ясно, что дети вашего корневого макета были настроены для родителя linearlayout и наивно копия вставить этот код в макете с относительным макете корневой

0

Если вы используете RelativeLayout для родителя, то вы должны использовать следующий, чтобы отправить его в правом нижнем углу зрения:

android:alignParentRight="true"

android:alignParentEnd="true"

android:alignParentBottom="true"

0

На вашем макете есть некоторые проблемы.

  • android:layout_weight не работает с RelativeLayout.
    Вы можете проверить official doc here.

  • android:layout_gravity не работает с RelativeLayout.
    Вы можете проверить official doc here.

Вы можете достичь макета во многих отношениях:

  • Лучше: Используйте CoordinatorLayout и android:layout_gravity="end|bottom". И может использоваться RecyclerView вместо ListView.
  • Используйте LinearLayout вместо RelativeLayout
  • Использовать RelativeLayout с android:alignParentEnd="true" и android:alignParentBottom="true"
  • Если вы хотите использовать вес, который вы можете использовать новый PercentRelativeLayout
Смежные вопросы