2010-01-18 7 views
26

Tworzę własny tytuł aktywności, wyłączając standardowy i samodzielnie zarządzając wszystkim. Zastanawiam się, czy możliwe jest zastąpienie/tytuł standardowego tytułu do moich potrzeb.Niestandardowy tytuł ze zdjęciem

Potrafię dostosować rozmiar, obraz tła i tekst za pośrednictwem motywów, zmieniając elementy windowXYZStyle.

Jedyne, czego nie mogłem znaleźć - jak dodać obraz zamiast tekstu. Próbowałem już requestWindowFeature(Window.FEATURE_CUSTOM_TITLE) i przypisać niestandardowy układ - ale wydaje się nie działać.

EDYCJA: Oto raport z sugestii testowania, kod znajduje się poniżej - wynik - widok obrazu nie jest wyświetlany.

aktywny

public class SettingsActivity extends PreferenceActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
     getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title); 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.settings); 

    } 
} 

XML : 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/title" 
    android:layout_width="fill_parent" 
    android:layout_height="26dip" 
    android:paddingLeft="5dip" 
    android:background="@drawable/titlebar_bg" 
    android:layout_gravity="left|center" 
> 
    <ImageView 
     android:id="@+id/logo" 
     android:src="@drawable/title_logo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

Odpowiedz

35

Można ustawić własny układ tytułów, ale kolejność wykonania ma znaczenie. Musisz wykonać czynności w następującej kolejności:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
setContentView(R.layout.my_layout); 
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_custom_title); 

Dodatkowo może być konieczne zwiększenie rozmiaru tytułu; jeśli tego nie zrobisz, dolna część Twojego niestandardowego układu może zostać po prostu zasłonięta przez Twoją aktywność. Możesz zmienić rozmiar, dodając motyw, który określa rozmiar tytułu. byłoby to do pliku wartości xml:

<resources> 
    <style name="LargeTitleTheme"> 
     <item name="android:windowTitleSize">40dip</item> 
    </style> 
</resources> 

Potem trzeba ustawić motyw dla swojej działalności (lub aplikacji, jeśli chcesz całą aplikację, aby ten niestandardowy pasek tytułowy) w AndroidManifest.xml:

<activity android:name=".MyCustomTitleActivity" android:theme="@style/LargeTitleTheme" /> 
+0

Hej Daniel, dzięki za odpowiedź, zrobiłem to zanim zadałem pytanie. Było późno, więc mogłem coś zepsuć. Czy próbowałeś tego? Wypróbuj w działaniu, które rozszerza PreferencesActivity i my_custom_title mają niestandardowe tło i logo (jako widok obrazu) - dla mnie przypisano własny tytuł, a widok tekstowy pojawił się - widok obrazu w my_custom_title - nie. To samo dotyczy tła - które można rozwiązać, dodając jeszcze jeden przedmiot do LargeTitleTheme. –

+0

Zrobiłem dokładnie to, co nakreśliłem powyżej (wziąłem przykładowy kod z mojego źródła).Jednak nigdy wcześniej nie próbowałem tego na PreferencesActivity; być może jest jeszcze coś, co musisz zrobić, aby zastąpić ten pasek tytułu. Nie jestem pewien, czy rozumiem, co teraz robisz; zregenerować? –

+0

Problem polega na tym, że widok obrazu nie pojawia się w niestandardowym tytule. I potrzebuję klapsa obrazka z logo zamiast tekstu. –

6

Zawsze możesz użyć:

requestWindowFeature(Window.FEATURE_NO_TITLE); 

a następnie utworzyć własny pasek tytułowy wewnątrz widoku swoją aktywność użytkownika.

+0

Tak to dokładnie to, co robię teraz. Myślałem, że istnieje sposób na standardowy temat. Na przykład pasek tytułu w aktywności preferencji. Naprawdę nie chcę zepsuć niestandardowych układów tylko ze względu na pasek tytułu. –

+2

Zaczynam myśleć, że to może być najlepsza opcja. Na początek uniknęłoby migotania paska tytułu, gdy aplikacja się otworzy, oraz hackowskiego rozwiązania, które musiałem użyć, aby usunąć marginesy z warstwy zawierającej, aby nie widzieć szarej ramki wokół paska tytułu. – Casebash

1

Czy jesteś pewien, że trzeba użyć obrazu w tytule zamiast po prostu łącząc go jako część obrazu tła i pozostawiając tytułowego pusty? Korzystając z obrazu NinePatch, oczekiwałbym, że będziesz w stanie osiągnąć wynik, który dobrze będzie wyglądał niezależnie od urządzenia?

1

Użyłem poniższy kod, żeby dopasować mój własny tytuł do ekranu

<ImageView 
    android:id="@+id/header_img" 
    android:src="@drawable/header_img" 
    android:layout_width="700dip" 
    android:layout_height="70dip" /> 
Powiązane problemy