2010-12-16 136 views
0

嗨,我已經設置了一個自定義標題欄,但應用程序崩潰,我沒有得到任何錯誤登錄LogCat,我瘋了。以下是一些代碼,你可以專家看看有什麼問題嗎?自定義標題欄不工作android

boolean isCustomTitleSupported; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     isCustomTitleSupported = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
     setContentView(R.layout.about); 
     customizeTitleBar("My Title"); 

    public void customizeTitleBar(String title){ 
     if(isCustomTitleSupported){ 
      getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar); 
      TextView customTitleText = (TextView)findViewById(R.id.customtitle); 
      customTitleText.setText(title); 
      customTitleText.setTextColor(Color.WHITE); 
     } 
    } 

customtitlebar.xml

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

    <TextView android:id="@+id/customtitle" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:textStyle="bold" 
     android:padding="3px" 
     /> 

</LinearLayout> 

一些幫助將不勝感激

謝謝!

編輯:我注意到我沒有擴展Activity,但是BaseActivity是我創建的超類,讓我的所有活動都可以使用該菜單。所以我改回來擴展活動,它的工作,但這是一個問題,因爲我也需要菜單。是否有任何技巧,所以我可以繼續擴展BaseActivity,甚至讓標題欄工作?

回答

1

您試圖從錯誤的佈局中提取customtitle TextView。當您使用findViewById時,它默認爲您當前活動的佈局,您將其設置爲R.layout.about。您需要使用佈局充氣器來充氣R.layout.customtitlebar,然後從中呼叫findViewById(因爲customtitle視圖位於customtitlebar佈局中)。

事情是這樣的:

View view = getLayoutInflater().inflate(R.layout.customtitlebar); 
TextView customTitleText = (TextView)view.findViewById(R.id.customtitle); 
+0

在我繼續嘗試做到這一點之前,我有一個問題。是否有可能使標題欄的高度更大?因爲我會根據活動放置不同的按鈕。 – madcoderz 2010-12-17 12:42:23

+0

不完全確定。但是,另一種選擇是製作自己的標題欄,而不是使用內置標題欄。然後,您可以更好地控制諸如高度等內容。請查看此項目的源代碼:http://code.google.com/p/iosched/ – 2010-12-17 17:23:42

3

您是否在設置內容視圖之前嘗試設置標題欄?

customizeTitleBar("My Title"); 
setContentView(R.layout.about); 
+0

是的,它不起作用。看看我之前發佈的貼子。 – madcoderz 2010-12-16 17:23:08

0

這似乎現在一半的工作,但沒有標題被設定,我的意思是我來到這裏的空標題欄的是我得到:

About.java

public class About extends BaseActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     customizeTitleBar("APP TITLE"); 

     setContentView(R.layout.about); 

     } 
} 

BaseActivity.java

public class BaseActivity extends Activity { 

    boolean isCustomTitleSupported; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     isCustomTitleSupported = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
     customizeTitleBar("MY TITLE"); 

    } 

    public void customizeTitleBar(String title){ 
     if(isCustomTitleSupported){ 
      getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar); 
      View view = getLayoutInflater().inflate(R.layout.customtitlebar, null); 

      TextView customTitleText = (TextView)view.findViewById(R.id.customtitle); 

      customTitleText.setText(title); 
      customTitleText.setTextColor(Color.WHITE); 
     } 
    } 
} 
0

請求的windowfeature - >的setContentView - >自定義標題

​​

這是我的onCreate的第一線。 customTitle()在我的超類中。

public void customTitle(int middle, int right, int altTitle, Boolean customTitle) { 
    if (customTitle) { 
     getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.titlebarlayout); 
     TextView titleMiddle = (TextView) findViewById(R.id.middleTitleBar); 
     titleMiddle.setText(getResources().getString(middle)); 

     TextView titleRight = (TextView) findViewById(R.id.rightTitleBar); 
     if (right != 0) { 
      titleRight.setText(getResources().getString(right)); 
     } else { 
      titleRight.setVisibility(View.GONE); 
     } 

     TextView title = (TextView) findViewById(altTitle); 
     title.setVisibility(View.GONE); 
    } else { 
     setTitle(getResources().getString(R.string.dashboard_offers)); 
    } 
} 

它與2個textviews,一個在中間,一個在右側的佈局。權利可以被設置爲消失。