2016-09-27 10 views
2

私はFABをLinearLayoutに固定しています。 Android Studioのプレビューに正しく配置されています。フラグメントが最初にロードされると、FABは正しい位置(ASからのプレビュー内の位置)に配置されません。 Fragmentを最初に作成した後のあるアクションは、FABを正しい場所に移動させます(EditTextにフォーカスし、新しいActivityに移動して戻るなど)。FABが一時的に不適切に配置されましたか?

誤った配置: Incorrect placement

正しい配置: enter image description here

ここでは私のレイアウトXMLです:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

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

      <LinearLayout 
       android:id="@+id/top" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical" 
       android:paddingBottom="@dimen/activity_vertical_margin" 
       android:paddingLeft="@dimen/activity_horizontal_margin" 
       android:paddingRight="@dimen/activity_horizontal_margin" 
       android:paddingTop="@dimen/activity_vertical_margin" 
       app:layout_behavior="@string/appbar_scrolling_view_behavior" 
       tools:context=".ui.main.MainFragment"> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/distance" 
        android:textStyle="bold"/> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:orientation="horizontal"> 
        <EditText 
         android:layout_width="60dp" 
         android:layout_height="40dp" 
         android:inputType="number" /> 
        <TextView 
         android:layout_width="wrap_content" 
         android:layout_height="40dp" 
         android:id="@+id/meas_unit" 
         tools:text="ft"/> 
        <SeekBar 
         android:id="@+id/distance_seekbar" 
         android:layout_width="0dp" 
         android:layout_height="40dp" 
         android:max="95" 
         android:progress="25" 
         android:background="@null" 
         android:layout_weight="1"/> 
       </LinearLayout> 

      </LinearLayout> 

      <View 
       android:layout_width="match_parent" 
       android:layout_height="1dp" 
       android:background="@android:drawable/divider_horizontal_bright" /> 

      <LinearLayout 
       android:id="@+id/bottom" 
       android:layout_width="match_parent" 
       android:layout_height="0dp" 
       android:layout_weight="1" 
       android:orientation="vertical" 
       android:paddingBottom="@dimen/activity_vertical_margin" 
       android:paddingLeft="@dimen/activity_horizontal_margin" 
       android:paddingRight="@dimen/activity_horizontal_margin" 
       android:paddingTop="@dimen/activity_vertical_margin" 
       app:layout_behavior="@string/appbar_scrolling_view_behavior" 
       android:elevation="6dp" 
       tools:context=".ui.main.MainFragment"> 

       <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/putters" 
        android:textStyle="bold"/> 

      </LinearLayout> 


     </LinearLayout> 

     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:layout_alignParentTop="false" 
      android:layout_alignParentEnd="false" 
      android:layout_alignParentBottom="true" 
      android:gravity="center" 
      android:layout_alignWithParentIfMissing="false" 
      android:layout_alignParentRight="false" 
      android:elevation="6dp"> 

      <Button 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="New Button" 
       android:id="@+id/button3" 
       android:layout_gravity="center_vertical" /> 

      <Button 
       android:layout_width="127dp" 
       android:layout_height="wrap_content" 
       android:text="New Button" 
       android:id="@+id/button4" /> 

     </LinearLayout> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="16dp" 
     android:clickable="true" 
     android:src="@drawable/ic_person_add_24dp" 
     app:layout_anchor="@id/top" 
     app:layout_anchorGravity="bottom|right|end" 
     android:tint="@android:color/white"/> 

</android.support.design.widget.CoordinatorLayout> 

私はAndroidのsupprt設計の古いバージョンではこの問題を抱えて覚えていません。ライブラリでは、com.android.support:design:23.1.1com.android.support:design:24.2.1に更新したときに浮上しているようです。

答えて

1

が、私はこれが動作しない理由の根本的な原因を把握することができませんでした「トップ」ではない「input_layout」(私はまだ疑い係留されているからですSupport Designライブラリのバグ)がありましたが、アンカービューを@id/bottomに切り替えて、重力をtop|right|endに変更することでこの問題を解決しました。

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="16dp" 
    android:clickable="true" 
    android:src="@drawable/ic_person_add_24dp" 
    app:layout_anchor="@id/bottom" 
    app:layout_anchorGravity="top|right|end" 
    android:tint="@android:color/white"/> 
0

あなたは

<android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="16dp" android:clickable="true" android:src="@drawable/ic_person_add_24dp" app:layout_anchor="@id/input_layout" app:layout_anchorGravity="bottom|right|end" android:tint="@android:color/white"/>

+0

input_layoutにアンカーすると、画面の右下にFABが表示されますが、これは私が望むものではありません。 2番目のスクリーンショットに正しい位置が示されています。 – dadykhoff

+0

書式に関する注意:バックチックを使用するのではなく、コードの各行の先頭に4つのスペースを追加する必要があります。 –

関連する問題