7

そのため、ナビゲーション ドロワーにhttps://github.com/neokree/MaterialNavigationDrawerを使用し、FAB 実装としてhttps://gist.github.com/Jogan/9def6110edf3247825c9を使用しています。ナビゲーション ドロワーを開くと、FAB が覆われず、その上にボタンが表示されます。ボタンを非表示にして、引き出しの開閉時にボタンを表示することは、かなり邪魔になるので避けたいと思います。これを修正する方法についてのアイデアはありますか?

編集: FAB をプログラムで次のように追加しています。

fabButton = new FloatingActionButton.Builder(this)
            .withDrawable(getResources().getDrawable(R.drawable.ic_action_edit))
            .withButtonColor(0xFF2196F3)
            .withGravity(Gravity.BOTTOM | Gravity.END)
            .withMargins(0, 0, 16, 16)
            .create();

その宣言をフラグメントに変更しても修正されません。上でリンクした Nav Bar の実装では、MaterialNavigationDrawer クラスから拡張するアクティビティが必要です。これにより、Nav Drawer が最初に描画され、ボタンが常に最後になる場合があります。要素の順序をプログラムで強制する方法はありますか?

4

4 に答える 4

8

この FAB 実装は FAB をコンテンツ ビューに追加するため、ナビゲーション ドロワーが開いているときに FAB が表示されます ( android.R.id.content)。ナビゲーション ドロワーの実装によっては、ビュー階層で同じレベルにあるように見えます。

別の FAB 実装に切り替えたくない場合。onDrawerSlide(View drawerView, float offset)ドロワーを開いたときに FAB alpha を使用および変更します。onDrawerClose()また、内部またはonDrawerOpen()メソッドの可視性を切り替えることもできます。

編集:

@Override
public void onDrawerSlide(View drawerView, float offset){
   fabButton.setAlpha(offset);
}
于 2015-01-08T21:42:39.360 に答える
2

アルファを含まない、または引き出しの開閉時にボタンを切り替える (遅延のように見える) 適切な解決策を見つけました。プログラムで、ドロワーのオフセットが変化する間、ボタンがアクティビティのウィンドウの外に遷移するように、ボタンの終了マージンを変更できます。

まず、onDrawerSlideメソッドの外で、次のコードを使用して FAB のレイアウト パラメータを取得する必要があります (ボタンのレイアウトに応じて、私の場合は aFrameLayoutです)。

final FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) fab.getLayoutParams();

単純な数学的線形方程式に基づいてこれを行っていることを理解してください: y = mx + n、「y」はマージン、「m」は勾配 (変更可能)、「x」はslideOffsetおよび「n」 ' はデフォルト/元の余白 (16 dp) です。これは、豊富な表示密度を考慮しながら、デフォルトのマージンと勾配をピクセルとして変数に割り当てる方法です。

int density = (int) Resources.getSystem().getDisplayMetrics().density;
final int defaultMargin = 16 * density;
final int slope = -100 * density;

次に、 内onDrawerSlideで次の操作を行います。

params.setMarginEnd((int) (slope * slideOffset + defaultMargin));
fab.setLayoutParams(params);

これがうまくいかない場合は、marginEnd作成時にボタンを設定するか、レイアウトのパラメーターのマージンを次のように設定してみてください (ただし、marginEnd右か左かを確認する必要があります)。

params.setMargins(int left, int top, int right, int bottom);

これが役に立ったことを願っています。これは私の最初の回答ですので、あまり不満がないことを願っています。

于 2015-02-14T23:04:40.080 に答える
0

Nikola Despotoskiソリューションを更新しています。

したがって、アルファを設定した後もファブを無効/非表示にする必要があるため、ファブが表示されている場所をユーザーがタップしても何も起こりません。

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open,
                R.string.drawer_close) {
   public void onDrawerClosed(View view) {
               // Visible/Enable the FAB
   }

   public void onDrawerOpened(View drawerView) {
               // Hide/Disable the FAB
   }

   @Override
   public void onDrawerSlide(View drawerView, float slideOffset) {
                // invert the slideOffset value
                fab.setAlpha(1-slideOffset);
   }
};
于 2016-10-10T14:18:44.157 に答える