2015-11-05 53 views
1

我正在與Snackbar和晶圓廠支持庫合作。 我想獲得Snackbar的高度,給出單線和多線消息的正確高度值。獲得小吃店支持庫的高度

var=mysnackbar.gethight(); 

但是這個代碼不工作,因爲snackbar確實有gethight()

+0

什麼是你想在你的情況acheive? – Droidwala

+0

我正在使用'CoordinatorLayout',當'snackbar'出現時,'fab'向上移動,這部分工作很棒。但是如果在出現'小吃店'之前,我看不到'fab',然後出現'snackba'r,出現'snackbar'後我可見我的'fab','fab'可見錯誤的位置(在'snackbar'後面)以獲得'小吃棒'和'setTranslationY'的高度。我希望用我的壞英語理解:D @Droidwala –

+0

有沒有必要做任何這樣的事情。我已經寫了幾週迴這個問題的答案..應該工作在你的情況... [http://stackoverflow.com/a/32777587/2819262] – Droidwala

回答

3

小吃吧將僅已展示()方法之後高度調用。嘗試撥打:

mSnackbar.show(); 
int height = mSnackbar.getView.getHeight(); 

或者您可以使用回調的小吃吧聽所示事件,並返回它的高度,如下圖所示:

mSnackbar.setCallback(new Snackbar.Callback { 
    @Override 
    Public void onDismissed(Snackbar snackbar, int event) { 
    } 

    @Override 
    Public void onShown(Snackbar snackbar) { 
     int height = snackbar.getView.getHeight(); 
    } 
) 
mSnackbar.show(); 
+0

mSnackbar.getView.getHeight()返回0 –

0

添加由@Grace編碼器

回答Snackbar.setCallback()已被棄用。

現在,您需要使用Snackbar.addCallback()

View parentView = findViewById(R.id.activity_main); 

    Snackbar snackbar = Snackbar.make(parentView, "Hello there.", Snackbar.LENGTH_SHORT); 
    snackbar.addCallback(new BaseTransientBottomBar.BaseCallback<Snackbar>() { 
     @Override 
     public void onShown(Snackbar transientBottomBar) { 
      int height = transientBottomBar.getView().getHeight(); 
      parent.setPadding(0, 0, 0, height); 

      super.onShown(transientBottomBar); 
     } 

     @Override 
     public void onDismissed(Snackbar transientBottomBar, int event) { 
      parent.setPadding(0, 0, 0, 0); 

      super.onDismissed(transientBottomBar, event); 
     } 
    }); 
    snackbar.show();