5

我有,首先要弄清楚的ActionBar的高度一個奇怪的問題。我在我的應用程序中有幾個部分,其中的東西位於ActionBar的正下方,我也在使用Chris Banes的圖書館actionbar-pulltorefreshAndroid的動作條身高問題

我將使用從拉的例子刷新庫。我遇到的問題與問題here完全相同,除了我正在按照指南的說明與Fragments一起完成所有操作。它基本上計算出ActionBar的高度大約是它的一半。另外,在應用程序的不同部分,我定位ActionBar低於PopupWindow,所以我稱之爲getHeight()並使用這個位置對我的窗口,我得到同樣的問題,因爲與拉刷新庫。

因此,這讓我覺得這與測量身高的方式有關,它可能是一個樣式問題。

但是,這裏有趣的地方。如果我將設備旋轉到橫向模式,即使我旋轉回肖像,它也會將高度設置爲正確的位置,並將所有位置都放在該位置。它會突然修復,直到我重新啓動應用程序並將其從內存中刪除並重新開始。

任何人都有類似的事情發生?

注意:現在我正在使用appcompat庫,但之前使用的是ActionBarSherlock,以及某些時候的基本ActionBar,並且所有場景都給出了相同的結果。

更新1:我從問題hereherehere相同的結果。然而,我正在做自述文件中所做的所有事情,我相當確信這與我的設備如何測量高度有關。

更新2:我用動作條PullToRefresh庫在另一個活動上工作得很好,所以它必須是與我的主要Activity

+0

問題是當你調用'getHeight()'?由於拉動刷新庫在特定時間調用它。即當創建'View'時。在旁邊注意你正在使用「查看傳呼機」? –

+0

我在一些'Fragments'中使用了'ViewPager',但是這個問題在父'Activity'的任何地方都存在。 – Wenger

+0

我在'Activity'' onCreate()'中調用'getHeight()'作爲第一件事情之一。 – Wenger

回答

4

我在我的活動 onCreate()中調用getHeight()作爲第一件事情之一。

這是什麼返回錯誤的高度,最有可能的是0ActionBar目前尚未準備好向您提供有關其自身的詳細信息。它正在創建過程中,以及活動的其餘視圖。

嘗試以下操作:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Don't call setContentView(int) 

    // Inflate the layout file that 
    // you would have used with setContentView(R.layout.xml_file) 
    View mContentView = getLayoutInflater().inflate(R.layout.xml_file, null); 

    // Add this Runnbale to mContentView's message queue 
    mContentView.post(new Runnable() { 

     @Override 
     public void run() { 
      Toast.makeText(Your_Activity.this, "ActionBar's height is " + 
         getActionBar().getHeight(), Toast.LENGTH_LONG).show(); 
     } 

    }); 

    // Initialize widgets contained in R.layout.xml_file 

    // Example 
    Button b = (Button) mContentView.findViewById(R.id.button_id); 

    ....   

    setContentview(mContentView); 
} 

這應該給你ActionBar的高度正確的值。

作爲一個概念證明,註釋掉mContentView.post(...);,並簡單地顯示吐司。吐司將最有可能說ActionBar's height is 0

+0

謝謝,我今晚會說這個。即使我不在任何地方的代碼中調用getHeight(),PullToRefresh庫仍然會給出鏈接的結果。 – Wenger

14

爲了確保有沒有在你的動作條意見,你可以在XML中添加上邊距它。

<SomeView 
    ... 
    android:layout_marginTop="?android:attr/actionBarSize" /> 

來源:http://developer.android.com/guide/topics/ui/actionbar.html#Style

UPDATE:以下添加上。我決定深入Android源代碼,看看實際的ActionBar高度應該是什麼。所以,我查看了所有不同類型的值/ dimens.xml以查找action_bar_default_height。以下是調查結果。

values/dimens.xml

<!-- Default height of an action bar. --> 
<dimen name="action_bar_default_height">48dip</dimen> 

values-land/dimens.xml

<!-- Default height of an action bar. --> 
<dimen name="action_bar_default_height">40dip</dimen> 

values-sw600dp/dimens.xml

<!-- Default height of an action bar. --> 
<dimen name="action_bar_default_height">56dip</dimen> 

我也查了以下,但他們不會覆蓋此屬性:

values-large 
values-sw380dp 
values-sw600dp-land 
values-sw720dp 
values-w360dp 
values-w600dp 
values-w720dp 
values-xlarge 

當我有更多時間時,我可能會尋找問題的根源,但在此之前,您可以將這三個值添加到不同的值文件夾中(作爲臨時修訂)。

+0

看來問題是actionBarSize返回錯誤的值。這應該是它的一半。 – Wenger

+0

好的。下面是我要放下的第一個答案(但找不到源代碼):我記得在Android文檔中的某處,它說ActionBar在縱向上是50dp高,在橫向上是44dp高(智能手機設備)。但是,我會盡快更新我的答案。 – Anonsage

+0

謝謝。這應該作爲一種創可貼,如果這是我能做的最好的事情,那麼我想這一定是有效的。 – Wenger