2015-10-31 12 views
7

Próbuję pokazać SnackBar na górze poniżej tego ToolBar w moim MainActivity,Pokazuj bistrem na górze (poniżej paska narzędzi)

Próbowałem ten kod:

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(); 

, ale SnackBar wyświetla się u góry, ale nie poniżej Toolbar.

Chcę coś podobnego do Hangout aplikacji takich jak:

enter image description here

Główna działalność:

<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> 

używam TSnackbar, bistrem pokazuje na pasek

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

Zanim stracisz 2 dni pracy, proszę bądź ware, że TSnackbar ma ogromny błąd, w którym Snackbar nie pojawi się zaraz po opuszczeniu działania i/lub fragmentu, w którym się znajduje. NIE polegałbym na tym do produkcji. –

+1

@HenriquedeSousa od 13 lutego, 18 myślę, że błąd został rozwiązany – GGWP

Odpowiedz

0

użyj PopupWindow, używając obsługi a s

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

zestaw margines na górze bistrem

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

ten pracował dla mnie, ustawić górny margines dla bistrem rozważyć rozmiar Toolbar:

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

ja daję poniżej kod, który użyłem w mojej aplikacji i który działa poprawnie dla zakresu urządzeń

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

zdefiniować widok:

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> 

poniższy kod aktywności/Fragment chcesz realizować bistrem od góry:

/** 
* 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(); 
} 

Dziękuję :)

Powiązane problemy