12

हाल ही में एंड्रॉइड लाइब्रेरी कुछ दिन पहले बाहर आई, लेकिन मैं SnackBar स्क्रीन के शीर्ष पर दिखाई देना चाहूंगा, अधिमानतः रिलेटिवलाउट के भीतर यह मूल दृश्य के रूप में दिखाई दे।मैं एंड्रॉइड स्नैकबार के शुरुआती संरेखण को नीचे से ऊपर कैसे बदलूं?

SnackBar के शुरुआती संरेखण को कैसे बदलता है जिसे मैं layout_alignParentBottomlayout_alignParentTop पर मानता हूं?

उत्तर

27

यह Snackbar का उपयोग कर स्क्रीन के शीर्ष पर प्रकट करना संभव है इस:

Snackbar snack = Snackbar.make(parentLayout, str, Snackbar.LENGTH_LONG); 
View view = snack.getView(); 
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams)view.getLayoutParams(); 
params.gravity = Gravity.TOP; 
view.setLayoutParams(params); 
snack.show() 

नोट: Snackbar के लिए एनीमेशन नीचे से शुरू होता है और क्योंकि उम्मीद के रूप में स्क्रीन के ऊपर तक surges यह इयानहैनिबेलके के जवाब के अनुसार नीचे होना था।

शीर्ष से बढ़ते अधिसूचनाओं के लिए, शायद इसके बजाय कस्टम बैनर प्राप्त करना बेहतर होगा।

+1

आपको अन्य एनिमेशन भी रखना होगा। in_form_top और out_to_top। यह http://stackoverflow.com/a/33333521/1031297 देखें – OWADVL

13

नहीं है, सामग्री डिजाइन spec for Snackbars प्रति:

Snackbars एक ऑपरेशन के बारे में हल्के प्रतिक्रिया स्क्रीन के तल पर एक संक्षिप्त संदेश दिखाकर प्रदान करते हैं।

डिजाइन पुस्तकालय सामग्री डिजाइन चश्मा लागू करने के लिए करना चाहता है के रूप में, यह संभव नहीं स्क्रीन (या युक्त CoordinatorLayout) के नीचे के अलावा अन्य किसी भी स्थिति में Snackbar स्थिति है।

+0

चाहते लेकिन मैं इसे स्क्रीन है, जो यह अब संभव है इसका मतलब है के शीर्ष दिखा रहा जा सकता है। शायद अतीत में यह संभव नहीं था। स्वीकृत उत्तर के अनुसार – zeeshan

+1

@zeeshan, स्नैकबार से जुड़ी एनीमेशन केवल नीचे की स्थिति मानती है क्योंकि यह एकमात्र स्थिति है जो समर्थित है। – ianhanniballake

+0

सच नहीं है। मैं इसे कहीं भी रख सकता हूं। असल में, मैंने इसे ऐप पर स्क्रीन के केंद्र में ले जाया है जिस पर मैं काम कर रहा हूं, क्योंकि यह वहां बेहतर दिखता था। मुझे लगता है कि मुझे एक सही उत्तर पोस्ट करना चाहिए और Google को उनके दस्तावेज़ों को अपडेट करने के बारे में भी जानकारी देना चाहिए। Google दस्तावेज़ों की पुरानी, ​​अप्रचलित और गुमराह जानकारी को देखना आम बात है। – zeeshan

1

यह सरल तरीके

में किया जा सकता

पहले लेआउट जहां Snackbar

<LinearLayout 
    android:id="@+id/info_container" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"/> 

तो कोड में

ll_mesg.addView(Snackbar.make(ll_mesg, "Please choose your luck from one of box", Snackbar.LENGTH_LONG) 
      .getView()); 
    new Handler().postDelayed(new Runnable() { 
     public void run() { 
      ll_mesg.removeAllViews(); 
      } 
     } 
     ,1000); 
4

यहाँ CoordinatorLayout का उपयोग कर Snackbar जोड़ने के लिए एक आसान तरीका है शामिल करने के लिए बनाएं स्क्रीन के शीर्ष से लेकिन एनीमेशन अभी भी एक मुद्दा है।

, बस की तरह अपने जमाव के बारे में CoordinatorLayout लेआउट जोड़ें:

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

और फिर अपने गतिविधि में इसे करने के लिए एक संदर्भ हो और Snackbar करने के लिए इसे नीचे के रूप में पारित:

CoordinatorLayout Clayout = (CoordinatorLayout)findViewById(R.id.snackbarlocation); 

    FabButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Snackbar.make(Clayout, "This snack bar located at top", Snackbar.LENGTH_SHORT).show(); 
     } 
    }); 

Credits

1

ठीक है, आप स्नैकबार के लेआउटपरैम प्राप्त कर सकते हैं और कोड में नीचे मार्जिन बदल सकते हैं।

तरह
Snackbar snackbar = Snackbar.make(rootView, message, Snackbar.LENGTH_LONG); 
View view = snackbar.getView(); 
FrameLayout.LayoutParams para = (CoordinatorLayout) view.getLayoutParams(); 
params.bottomMargin = showAtLocation // pass your location offset here 
view.setLayoutParams(params); 

तो फिर तुम दिखाने के लिए Snackbar उदाहरण का उपयोग जब भी आप

snackbar.show(); 
संबंधित मुद्दे