2010-12-16 17 views
0

Hallo ich habe eine benutzerdefinierte Titelleiste eingerichtet, aber die App stürzt ab und ich bekomme kein Fehler log in LogCat, ich werde verrückt. Hier ist ein Code, können Sie Experten sehen, was los ist?benutzerdefinierte Titelleiste funktioniert nicht 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> 

etwas Hilfe wird

Dank geschätzt werden !!

BEARBEITEN: Ich bemerkte, dass ich Aktivität nicht erweitert, aber BaseActivity eine Superklasse, die ich erstellt habe, um das Menü in allen meinen Aktivitäten verfügbar zu haben. Also habe ich mich wieder auf Extend Activity umgestellt und es funktioniert, aber das ist ein Problem, da ich auch Menüs brauche. Gibt es irgendwelche Tricks, um die BaseActivity zu erweitern und sogar die Titelleiste zu aktivieren?

Antwort

1

Sie versuchen die customtitle Textview aus dem falschen Layout zu extrahieren. Wenn Sie findViewById verwenden, wird standardmäßig das Layout Ihrer aktuellen Aktivität verwendet, das Sie auf R.layout.about festlegen. Sie müssen einen Layout-Inflater verwenden, um R.layout.customtitlebar aufzublasen und dann findViewById von diesem zu rufen (da die customtitle Ansicht in der customtitlebar Layout ist).

Etwas wie folgt aus:

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

Bevor ich weiter versuche, dies zu erreichen, habe ich eine Frage. Ist es möglich, die Titelleiste größer zu machen? weil ich dort je nach Aktivität verschiedene Knöpfe platzieren werde. – madcoderz

+0

Nicht ganz sicher darüber. Eine andere Option besteht jedoch darin, eine eigene Titelleiste zu erstellen und nicht die integrierte Titelleiste zu verwenden. Dann haben Sie viel mehr Kontrolle über Dinge wie Höhe usw. Sehen Sie sich dieses Projekt für den Quellcode an: http://code.google.com/p/iosched/ –

3

Haben Sie versucht, die Titelleiste zu setzen, bevor Sie die Inhaltsansicht einstellen?

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

ja es funktioniert nicht. Schau dir die Bearbeitung an, die ich im vorherigen Post gepostet habe. – madcoderz

0

Es scheint jetzt halb zu arbeiten, aber kein Titel festgelegt wird, ich meine, dass ich eine leere Titelleiste bekommen hier ist das, was ich habe:

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

Antrag der windowfeature -> setContentView -> Titel

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Boolean customTitle = requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);  
    setContentView(R.layout.listviewoffers); 
    customTitle(R.string.dashboard_offers, 0, R.id.listViewTitle, customTitle); 

anpassen Dies sind die ersten Zeilen meines onCreate. Die customTitle() ist in meiner Oberklasse.

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)); 
    } 
} 

Es ist ein Layout mit 2 Textansichten, eine in der Mitte, eine in der rechten. Das Recht kann gesetzt werden wie gegangen.

Verwandte Themen