2017-12-26 15 views
1

フローティングアクションボタンの位置を、フローティングアクションがそのフラグメントの重要な内容をカバーしている場合があるため、プログラムの一部の特定の場所でプログラムを使用して移動したいとします。私は、アクティビティ内のフローティングアクションボタンの参照を取得し、それを静的変数に格納しました。フラグメントのonResumeメソッドで重力を変更しようとしています。 イメージでわかるように、fabはy軸をカバーしていますので、ENDに移動したいと思います。 Image for the referenceAndroid:フローティングアクションボタンの重力をプログラムで設定する方法

フラグメントのonResumeメソッドのコード(動作しない):あなたのXMLファイルで

override fun onResume() { 
    super.onResume() 
    val params : CoordinatorLayout.LayoutParams = BaseActivity.fab!!.layoutParams as CoordinatorLayout.LayoutParams 
    params.anchorGravity = GravityCompat.END 
    BaseActivity.fab!!.layoutParams = params 
} 

主な活動の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" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.example.mandar.hackerthon_app.Activities.BaseActivity" 
    tools:showIn="@layout/app_bar_base"> 

    <FrameLayout 
     android:id="@+id/frameBaseFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"></FrameLayout> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     android:layout_margin="20dp" 
     android:scaleType="center" 
     android:elevation="10dp" 
     app:backgroundTint="@color/common_google_signin_btn_text_dark_default" 
     app:srcCompat="@mipmap/ic_connection_on_round" /> 

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

レイアウトパラメータを設定した後、 'View#requestLayout'を呼び出すようにしてください。 – kernelmaster

答えて

0

FloatingActionButtonためapp:layout_anchorプロパティを追加、などlayout_anchorGravityは、アンカービューを指定した場合にのみ考慮されます。

あなたの場合、このアンカーは@id/frameBaseFragmentです。 FloatingActionButtonを親のCoordinatorLayoutの末尾に移動する場合は、代わりにlayoutGravityの値を変更することができます。

また、関連するActivityがガベージコレクションされず、大きなメモリリークを引き起こすため、ビューへの参照を静的変数に格納することを強くお勧めします。これはあなたの問題の原因かもしれません。

+0

助けていただきありがとうございます。それはうまくいきました。あなたの提案については、断片内のアクティビティの要素を参照する効率的な方法がありますか? –

+0

ビューの参照は、アクティビティの_instance_変数(またはフィールド)として保持してください。 'onCreate'で' findViewById'を使って特定のビューへの参照を取得し、その変数を 'onResume'やその他のメソッドで使用することができます。 –

+0

初心者の方は、毎日のコーディング慣行ではメモリリークのようなことは当然のことではありません。ご指摘ありがとうございます:) –

関連する問題