2015-10-31 22 views
7

Tôi đang cố gắng để hiển thị một SnackBar trên đầu trang bên dưới của ToolBar trong MainActivity tôi,Hiển thị SnackBar trên đầu (sau đây của thanh công cụ)

Tôi đã thử mã này:

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

nhưng SnackBar hiển thị ở trên cùng nhưng không hiển thị bên dưới Toolbar.

Tôi muốn một cái gì đó tương tự như Hangout ứng dụng như:

enter image description here

Hoạt động chính:

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

Tôi đang sử dụng TSnackbar, các SnackBar đang hiển thị trên thanh công cụ

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

Trước khi bạn mất 2 ngày làm việc, vui lòng là ware mà TSnackbar có một lỗi lớn trong đó Snackbar sẽ không xuất hiện ngay sau khi bạn rời khỏi hoạt động và/hoặc mảnh mà nó cư trú. Tôi sẽ KHÔNG dựa vào nó để sản xuất. –

+1

@HenriquedeSousa kể từ ngày 13 tháng 2 năm 18 tôi nghĩ rằng lỗi đã được giải quyết – GGWP

Trả lời

0

sử dụng PopupWindow sử dụng trình xử lý s

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

bộ lợi nhuận trên đầu trang của snackbar

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

này đã làm việc cho tôi, thiết lập lề trên cho snackbar của bạn, hãy xem xét kích thước thanh công cụ của bạn:

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

Tôi đưa ra dưới đây mã mà tôi đã sử dụng trong ứng dụng của mình và đang hoạt động bình thường cho phạm vi thiết bị

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

xác định xem:

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> 

Dưới mã trong hoạt động/Fragment bạn muốn thực hiện các Snackbar từ đầu:

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

Cảm ơn bạn :)

Các vấn đề liên quan