2017-09-11 14 views
-1

je suis en train d'ajouter un écouteur tactile pour FAB afin que je puisse le faire glisser où dans le FrameLayout, bien mon écoute tactile fonctionne bien mais la position par défaut du FAB arrive en haut de l'écran, je voulais que ce soit en bas à droite de l'écran.Comment configurer la FAB dans une mise en page de cadre en bas de l'écran sans utiliser l'option de gravité jeu

si je mets la gravité vers le bas, mon contact travail wont auditeur, comment obtenir dynamiquement?

ci-dessous est mon code woking

code mise en page

`` `

<FrameLayout 
     android:id="@+id/frame_layout_content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:foreground="@drawable/dashboard_foreground" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" > 

     <android.support.design.widget.FloatingActionButton 
      android:id="@+id/dash_fab" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/mike" 
      app:fabSize="normal" /> 

</FrameLayout> 

` ``

Activité `` `

private int mTopMargin = 300; 
mFab = (FloatingActionButton) findViewById(R.id.dash_fab); 

FrameLayout.LayoutParams lpDraggableView = new 
FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, 
FrameLayout.LayoutParams.WRAP_CONTENT); 

mFab.setLayoutParams(lpDraggableView); 

mFab.setOnTouchListener(OnTouchToDrag); 

public View.OnTouchListener OnTouchToDrag = new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     FrameLayout.LayoutParams dragParam = (FrameLayout.LayoutParams) v.getLayoutParams(); 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_MOVE: { 
       if (((int) event.getRawY() - (v.getHeight() + mTopMargin)) > 0) { 
        dragParam.topMargin = (int) event.getRawY() - (v.getHeight() + mTopMargin); 
        TCLog.d("Custom", "topMargin" + ((int) event.getRawY() - (v.getHeight() + mTopMargin))); 
        dragParam.leftMargin = (int) event.getRawX() - (v.getWidth()); 
        v.setLayoutParams(dragParam); 
       } 
       break; 
      } 
      case MotionEvent.ACTION_UP: { 
       // dragParam.height = 150; 
       // dragParam.width = 150; 
       dragParam.height = v.getHeight(); 
       dragParam.width = v.getWidth(); 
       dragParam.topMargin = (int) event.getRawY() - (v.getHeight() + mTopMargin); 
       dragParam.leftMargin = (int) event.getRawX() - (v.getWidth()/2); 
       v.setLayoutParams(dragParam); 
       break; 
      } 
      case MotionEvent.ACTION_DOWN: { 

       break; 
      } 
     } 
     return true; 
    } 

}; 

Même j'ai essayé le Seting la mise en page params dynamique, il va sortir de l'écran. `` `

DisplayMetrics displayMetrics = getBaseContext().getResources().getDisplayMetrics(); 

float dpHeight = displayMetrics.heightPixels ; 
float dpWidth = displayMetrics.widthPixels ; 
lpDraggableView.topMargin = dpHeight; 
lpDraggableView.leftMargin = dpWIdth; 
mFab.setLayoutParams(lpDraggableView); 

` ``

+0

vous avez essayé 'gravity' ou' layout_gravity'? –

+0

j'ai essayé la gravité lpDraggableView.gravity = Gravity.BOTTOM; cela va mettre le FAB au fond mais je ne peux pas le faire glisser. – Uday

+0

Quelle est la disposition racine de 'FrameLayout'? –

Répondre

0

Vous devriez calculer la position par vous-même si vous voulez ne pas utiliser la gravité.

C'est mieux Acquise dans la méthode onResume où l'inflation de mise en page et mesure déjà terminé.

Vous pouvez utiliser la largeur et la hauteur d'affichage si vous voulez faire dans onCreate.

Si vous avez une vue personnalisée vous pouvez placer votre code de calcul dans la méthode onMeasure.

+0

yup j'ai essayé par cela mais je pense que le bouton est hors de la vue. DisplayMetrics displayMetrics = getBaseContext(). GetResources(). GetDisplayMetrics(); float dpHeight = displayMetrics.heightPixels; float dpWidth = displayMetrics.widthPixels; lpDraggableView.topMargin = dpHauteur; lpDraggableView.leftMargin = dpWIdth; – Uday

+0

Pouvez-vous partager l'extrait de code?/ – Uday

+0

Oui, exactement votre message, il vous suffit de soustraire la taille du bouton, mais voici un problème, dansCréer sa taille est de 0,0, vous pouvez donc calculer plus de 42dp par exemple . –