2012-08-25 35 views
1

我用我的應用程序自定義標題欄,但每次我創建一個新的佈局我有打電話:如何在主題設置默認佈局

<include 
    android:id="@+id/titlebar" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="@integer/titlebar_weight" 
    layout="@layout/titlebar" /> 

在所有的佈局如何這與其說是我可以在主題中定義它嗎(換句話說:定義主題的默認佈局)?

我的默認佈局:

Default Layout

回答

1

我會建議不要創建動作條你自己,你可以嘗試:

Actionbar Sherlock或ActionbarCompat(從您的SDK中的谷歌樣本)。

0
<resources> 
    <style name="Theme.Transparent" parent="android:Theme"> 
     <item name="android:windowIsTranslucent">true</item> 
     <item name="android:windowBackground">@android:color/transparent</item> 
     <item name="android:windowContentOverlay">@null</item> 
     <item name="android:windowNoTitle">true</item> 
     <item name="android:windowIsFloating">true</item> 
     <item name="android:backgroundDimEnabled">false</item> 
    </style>  
</resources> 



<activity 

    android:theme="@style/Theme.Transparent" 

</activity> 
+0

我想知道的是:「在佈局我怎麼能在一個主題定義它(自定義標題欄)這與其說是?」。這是我如何刪除默認標題欄... –

3

雖然舊的標題欄可以通過一個主題(windowTitleStylewindowTitleSizewindowTitleBackgroundStyle)定做了一下,你不能設置自己的佈局。此外,標題欄被Android 3.0中的ActionBar所取代,因此無論如何都無濟於事。

設置在一個主題默認佈局是不可能的,至少我無法找到一個方法來做到這一點。但你仍然有幾個選擇加入你的頭佈局時減少重複:

  • 創建主佈局與您的頭和您的內容ViewStub,然後通過代碼設置inflatedId。
  • 考慮與片段構建屏幕並添加/由你做主佈局編程方式刪除它們。
  • 程序添加一個報頭的基本活動(由user1527136建議)
  • 包括它(這是你已經在做的事情,這並不壞恕我直言)
+0

我們必須做的選項也很簡單,沒有必要設置默認佈局,也許這就是爲什麼Android不允許這樣做(也許不記得做那)。 我衝了一下設置這個獎金:/ 不過謝謝你的回答,你活該。 –

+0

@SergioCarneiro非常感謝。 – brillenheini

0

我不認爲這可以通過主持單獨實現。您將需要創建一個抽象Activity,其中將包括您的標題欄和包裹由擴展Activity類設置的內容視圖。這裏有一個例子:

XML

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <include 
     android:id="@+id/titleBar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     layout="@layout/titlebar" /> 

    <FrameLayout 
     android:id="@+id/content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

摘要活動

public abstract class TitleBarActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     super.setContentView(R.layout.title_bar_activity); 
    } 

    @Override 
    public void setContentView(int layoutResId) { 

     FrameLayout contentFrameLayout = (FrameLayout) findViewById(R.id.content); 
     contentFrameLayout.removeAllViews(); 
     getLayoutInflater().inflate(layoutResId, contentFrameLayout); 
    } 
} 

這是一個非常簡單的實現,但應該給你的,你需要做的總體思路。現在,對於延伸TitleBarActivity的任何活動,默認情況下,您的頂部都會有標題欄。標題中的任何自定義你希望你的活動來控制,加入TitleBarActivity的方法來做到這一點。

相關問題