web-dev-qa-db-ja.com

FloatingActionButton setVisibility()が機能しない

FloatingActionButtonを非表示にすることはできません。これが私のコードです:

XML:

<CoordinatorLayout>

    <AppBarLayout Android:id="@+id/appbar">

        <CollapsingToolbarLayout>

            <ImageView/>

            <Android.support.v7.widget.Toolbar />

        </CollapsingToolbarLayout>

    </AppBarLayout>

    <NestedScrollView />

    <Android.support.design.widget.FloatingActionButton
        Android:id="@+id/fab"
        app:layout_anchor="@id/appbar"
        app:layout_anchorGravity="bottom|right|end"/>

</CoordinatorLayout>

そして私は呼んでいます:

fab.clearAnimation();
fab.setVisibility(View.GONE);

FABを非表示にしようとしていますが、FABがsetVisibilityにある場合、clearAnimation + CoordinatorLayoutが機能しないようです。

fab.clearAnimationを呼び出しても、アニメーションはトリガーされます。誰か助けてもらえますか?

17
user2331095

アニメーションに問題がある場合は、FAB Behaviorを無効にしてみてください。可視性については、レイアウトで設定したアンカーをnullにする必要があります。

CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
p.setBehavior(null); //should disable default animations
p.setAnchorId(View.NO_ID); //should let you set visibility
fab.setLayoutParams(p);
fab.setVisibility(View.GONE); // View.INVISIBLE might also be worth trying


//to bring things back to normal state
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
p.setBehavior(new FloatingActionButton.Behavior());
p.setAnchorId(R.id.appbar);
fab.setLayoutParams(p);
15
natario

Showおよびhideメソッドを使用して、フローティングアクションボタンを表示および非表示にする

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);

// To show the Floating Action Button
fab.show();

// To hide the Floating Action Button
fab.hide();
39
mstoic

FloatingActionButtonの場合、setVisibility()メソッドを使用すると、最新のGradle 6.xおよびbuild-tool 28.x.xでビルド中にエラーが発生し、推奨されなくなりました。 代わりに、次を使用:

fab.hide()    // fab.setVisibility(View.GONE)
fab.show()    // fab.setVisibility(View.VISIBLE)

注:Android Studio 3.4.1Gradle 6.0およびbuild-tool 28.0.1でのテストに成功

13
Rahul Raina

私はまったく同じ問題に遭遇しました。この問題で説明したように、FloatingActionButtonがAppBarLayoutにアンカーされている場合、GoogleのAndroidチームは可視性を制御することを望んでいないようです- FloatingActionButtonはビューの可視性を無視します

次のように、実行可能な修正はFABをFrameLayoutでラップし、代わりにラッパーの可視性を設定しているようです。

<Android.support.design.widget.FrameLayout
    Android:id="@+id/fab_container"
    Android:layout_height="wrap_content"
    Android:layout_width="wrap_content"
    Android:visibility="invisible">

    <Android.support.design.widget.FloatingActionButton
        Android:id="@+id/fab"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:src="@drawable/fab_icon"/>

</Android.support.design.widget.FrameLayout>

ただし、これが理想的な動作であるかどうかを検討することもできます。 Googleの支持者は、画面が作成されたらすぐにFABを表示することを推奨しています。アニメーション化に必要な時間より長く非表示にしている場合は、代わりに無効状態を表示することを検討してください。

6
AlgoRyan
FloatingActionButton layers = (FloatingActionButton) findViewById(R.id.layers);
layers.hide();

setVisibilityは、FloatingActionButtonメソッドを持たない別のviewGroupに属しているため、setVisibilityでは機能しません。

2
Satendra Behre

あなたはそれを無効にして、このように半透明にすることができます

fab.setEnabled(false);
fab.setClickable(false);
fab.setAlpha(0.3f);
1
Dan Alboteanu