2010-07-10 14 views
6

Come utilizzare lo stile di titolo della finestra predefinito di androids per rendere il mio simile TextView?Creazione di una vista titolo personalizzata da impostazioni predefinite su Android

Ho fatto un sacco di ipotesi e ho creato un TextView che ha tutto ciò che ha la barra del titolo predefinita, ad eccezione dell'ombra del testo (e qualche padding/margini ecc.).

Ecco in sostanza, che cosa ho provato:

MainUI.xml

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 

    setContentView(R.layout.main); 

    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar); 
} 

title_bar.xml

<?xml version="1.0" encoding="utf-8"?> 

<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/myTitle" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:textAppearance="@android:style/TextAppearance.WindowTitle" 
    android:background="@android:drawable/title_bar" 
    android:text="This is my new title" /> 

Modifica:

ho trovato alcuni articoli correlati interessanti allo makemachine e anddev.

Anche se non mi piace, ho copiato alcuni attributi dall'implementazione style.xml.

C'è un modo per evitare di copiare gli attributi in questo modo statico?

Il rendering seguente è quasi perfetto, la differenza è infatti che l'originale ha "tagliato" i primi 2-3 pixel dell'ombra del titolo, mentre il mio TextView non lo fa.

<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/myTitle" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:gravity="center_vertical" 
    android:shadowColor="#BB000000" 
    android:shadowRadius="2.75" 
    android:singleLine="true" 
    android:textAppearance="@android:style/TextAppearance.WindowTitle" 
    android:background="@android:drawable/title_bar" 
    android:text="This is my new title" /> 

E 'anche importante per ignorare l'androide di default: windowTitleBackgroundStyle con un colore trasparente, in quanto il valore di default include alcuni padding ecc che non si desidera essere avvolgendo il barra del titolo personalizzato.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="CustomTheme" parent="android:Theme"> 
    <item name="android:windowTitleBackgroundStyle">@android:color/transparent</item> 
    </style> 
</resources> 

Ricordate di attivare il tema nel vostro AndroidManifest.xml

+0

Non capisco quello che stai cercando di fare. Sei disposto a copiare la barra del titolo predefinita fatta da Android? – Macarse

+0

Sì, finché posso modificarlo. Voglio che la barra del titolo di funzionare anche come una barra di avanzamento :-) – Steinbitglis

+1

non so se questo aiuterà o no, ma [RomManager] (https://market.android.com/details?id=com.koushikdutta.rommanager&hl= en) fa che quando si va a scaricare rom, la barra del titolo si riempie di colore grigio da sinistra a destra come si sta caricando. se lo esegui mentre stai eseguendo il visualizzatore di gerarchia, puoi vedere che hanno la barra di avanzamento e il cerchio del progresso. –

risposta

0

provare questo ha funzionato per me:

mettere il resto del codice in posto ..

super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
    setContentView(R.layout.main); 
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.main_header); 
    TextView home = (TextView) findViewById(R.id.home); 
     if (home != null) { 
      /* your code here */ 
      home.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // the action that u want to perform 
       Menu.this.finish(); 
       Intent i= new Intent(Main.this,Destination.class); 
       startActivity(i); 
      } 
     }); 
     } 

creare un file di layout main_header

<?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" > 


    <RelativeLayout 
     android:id="@+id/relativeLayout1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:text="Main Menu" 
      android:textStyle="bold" 
      android:textSize="10pt" /> 

     <TextView 
      android:id="@+id/home" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignBaseline="@+id/textView1" 
      android:layout_alignBottom="@+id/textView1" 
      android:layout_alignParentRight="true" 
      android:textStyle="bold" 
      android:text="Home" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

    </RelativeLayout> 

</LinearLayout> 

qui quando eseguiamo il codice mostrerà una barra del titolo personalizzata in cui ci sono due testi in esso e quando clicchiamo su quello andrà alla classe successiva (alla classe di destinazione). possiamo anche cambiare il colore, la dimensione del carattere ecc. e aggiungere anche i pulsanti ecc. alla barra del titolo personalizzata.

Problemi correlati