2015-10-31 23 views
7

Sto cercando di mostrare una SnackBar in cima al di sotto della ToolBar nel mio MainActivity,Mostra un Bar in sulla parte superiore (al di sotto della barra degli strumenti)

Ho provato questo codice:

mToolbar = (Toolbar) findViewById(R.id.toolbar); 
Snackbar snack = Snackbar.make(findViewById(android.R.id.content), "Had a snack at Snackbar", Snackbar.LENGTH_LONG); 
    View view = snack.getView(); 
    FrameLayout.LayoutParams params =(FrameLayout.LayoutParams)view.getLayoutParams(); 
    params.gravity = Gravity.TOP; 
    view.setLayoutParams(params); 
    snack.show(); 

ma lo SnackBar viene visualizzato in alto, ma non sotto lo Toolbar.

Voglio qualcosa di simile a Hangout applicazione come:

enter image description here

attività principale:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/Coordinator" 
    xmlns:fab="http://schemas.android.com/apk/res-auto" 
    tools:context=".MainActivity"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <android.support.v7.widget.Toolbar 

      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:minHeight="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

<ImageView 
    android:layout_width="75dp" 
    android:layout_height="28dp" 
    android:src="@drawable/athena"/> 



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








     <ProgressBar 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/progressBar5" 
      android:layout_marginTop="10dp" 
      android:layout_gravity="center_horizontal" /> 

     <android.support.v4.widget.SwipeRefreshLayout 
      android:id="@+id/swipeRefreshLayout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <android.support.v7.widget.RecyclerView 
       android:id="@+id/my_recycler_view" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:scrollbars="vertical" /> 
     </android.support.v4.widget.SwipeRefreshLayout> 







    </LinearLayout> 






    <com.melnykov.fab.FloatingActionButton 
     android:id="@+id/add" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="end|bottom" 
     android:layout_margin="16dp" 
     fab:fab_colorNormal="@color/colorPrimary" 
     android:src="@drawable/ic_action_name9" /> 

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

sto usando TSnackbar, il Bar in mostra sopra la barra degli strumenti

TSnackbar.make(findViewById(android.R.id.content),"Hello from TSnackBar.",TSnackbar.LENGTH_LONG).show(); 
+2

Prima di perdere 2 giorni di lavoro, si prega di essere un che TSnackbar ha un enorme bug in cui lo Snackbar non apparirà non appena lascerai l'attività e/o il frammento in cui risiede. NON mi affiderei per la produzione. –

+1

@HenriquedeSousa a partire dal 13 febbraio 18 penso che il bug sia stato risolto – GGWP

risposta

0

utilizza PopupWindow utilizzando il gestore a s margine

if(!topPopupWindow.isShowing()){ 
    topPopupWindow.showAsDropDown(toolbar); 
} 
handler.removeMessages(0); 
handler.sendEmptyMessageDelayed(0,2500); 
0

set in cima snack

Snackbar snack = Snackbar.make(findViewById(android.R.id.content), "Had a snack at Snackbar", Snackbar.LENGTH_LONG); 
View view = snack.getView(); 
FrameLayout.LayoutParams params =(FrameLayout.LayoutParams)view.getLayoutParams(); 
params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP; 

// calculate actionbar height 
TypedValue tv = new TypedValue(); 
int actionBarHeight=0; 
if (getTheme().resolveAttribute(R.attr.actionBarSize, tv, true)) 
{ 
    actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics()); 
} 

// set margin 
params.setMargins(0, actionBarHeight, 0, 0); 

view.setLayoutParams(params); 
snack.show(); 
0

Questo ha funzionato per me, impostato margine superiore per il vostro snack, prendere in considerazione la dimensione della barra degli strumenti:

View view = snack.getView(); 
    CoordinatorLayout.LayoutParams params2 =(CoordinatorLayout.LayoutParams)view.getLayoutParams(); 
    params2.setMargins(0,50,0,0); 
0

sto dando seguito il codice che ho usato nella mia app e che funziona correttamente per la gamma di dispositivi

Complie : compile 'com.androidadvance:topsnackbar:1.1.1' 

definiscono vista:

private CoordinatorLayout CSnakbarLayout; 

CSnakbarLayout = (CoordinatorLayout) rootView.findViewById(R.id.snackbar_event_mesg); 

XML:

<android.support.design.widget.CoordinatorLayout 
     android:id="@+id/snackbar_event_mesg" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true"> 

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

sottostante Codice nell'attività/Frammento si desidera implementare lo Snackbar dall'alto:

/** 
* Method to display message for on going Event 
*/ 
private void displaySnackbar() { 
    int duration = 4000; 
    final TSnackbar snackbar = TSnackbar.make(CSnakbarLayout, getString(R.string.on_going_event_mesg), TSnackbar.LENGTH_INDEFINITE); 
    snackbar.setActionTextColor(Color.WHITE); 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       snackbar.dismiss(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }, duration); 
    snackbar.setAction("Ok", new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      snackbar.dismiss(); 
     } 
    }); 
    View snackbarView = snackbar.getView(); 
    ViewGroup.LayoutParams params = snackbarView.getLayoutParams(); 
    params.height = 300; 
    snackbarView.setLayoutParams(params); 
    snackbarView.setBackgroundColor(Color.BLACK); 
    TextView textView = (TextView) snackbarView.findViewById(com.androidadvance.topsnackbar.R.id.snackbar_text); 
    textView.setTextColor(Color.WHITE); 
    textView.setMaxLines(5); 
    snackbar.show(); 
} 

Grazie :)

Problemi correlati