W tym wpisie zostanie przedstawione kilka możliwości toolbar’a. Android Toolbar został wprowadzony do androida w wersji 21 znany jako Android Lollipop. Jest następcą ActionBar’a. Znajduje się w grupie View oraz jest bardziej elastyczny i wygodniejszy w użyciu niż jego poprzednik. Aby użyć go we wcześniejszych wersjach androida trzeba użyć biblioteki wsparcia. Toolbar jest zaimplementowany w klasie android.support.v7.widget.Toolbar.
1. Dodanie paska do aktywności.
W najprostszej formie Layout dla danej aktywności może wyglądać następująco:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" app:titleTextColor="@android:color/white" android:background="?attr/colorPrimary"> </android.support.v7.widget.Toolbar> </LinearLayout>
Wpis: android:fitsSystemWindows=”true” jest po to aby dobrze był „wyświetlony” pasek. Zobacz więcej.
Kod aktywności może wyglądać nastepująco:
import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; public class App_Toolbar extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_app__toolbar); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); } }
Lepszym sposobem na dodanie toolbara jest stworzenie osobnego pliku res/layout/toolbar.xml:
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary"/>
natomiast w pliku layout.activity_main dodajemy pasek przez include:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:orientation="vertical"> <include layout="@layout/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
Dzięki takiemu zabiegowi nie powtarzamy kodu dla toolbara, wystarczy, że w kolejnych aktywnościach dołączymy plik.
2. Dodanie ikon do paska.
Aby dodać ikony sterujące (te z lewej, np: ikona aplikacji) w klasie aktywności dodajemy następujące linijki kodu:
getSupportActionBar().setDisplayShowHomeEnabled(true); getSupportActionBar().setLogo(R.mipmap.ic_launcher); getSupportActionBar().setDisplayUseLogoEnabled(true);
Aby dodać ikony pomocnicze (te z prawej) w klasie aktywności dodajemy po metodzie onCreate:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; }
Następnie utworzyć plik z menu w res/menu/menu_main.xml o następującej zawartości:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/IconEmail" android:icon="@android:drawable/ic_dialog_email" app:showAsAction="ifRoom" android:title="Email"> </item> <item android:id="@+id/IconSearch" android:icon="@android:drawable/ic_menu_search" app:showAsAction="ifRoom|withText" android:title="Search"> </item> </menu>
3. Własny toolbar.
Czasami potrzeba stworzyć własny toolbar z własnym wyglądem. Poniżej zostanie przedstawiony toolbar który, będzie miał tytuł na środku ekranu wraz z inną czcionką i kolorem.
Przykładowy plik wyglądu activity_toolbar.xml może wyglądać następująco:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" app:contentInsetLeft="0dp" app:contentInsetStart="0dp" android:layout_width="match_parent" android:layout_height="wrap_content" app:titleTextColor="@android:color/white" android:background="?attr/colorPrimary"> <TextView android:id="@+id/toolbar_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textStyle="italic" android:textColor="@android:color/white" android:textSize="15dp"/> </android.support.v7.widget.Toolbar> </LinearLayout>
Natomiast w klasie aktywności dodajemy:
// Usuwamy domyślny tytul getSupportActionBar().setDisplayShowTitleEnabled(false); // Ustawiamy na wlasny tytul TextView mTitle = (TextView) toolbar.findViewById(R.id.toolbar_title); mTitle.setText("Własny Toolbar");
4. Przezroczystość toolbara.
Oto kolejna właściwość paska. W klasie activity musimy dodać dwie rzeczy:
Po pierwsze zaraz po wywołaniu setContentView dodajemy:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window w = getWindow(); w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); }
A później w sekcji dla toolbara dodajemy:
toolbar.getBackground().setAlpha(0);
Wartość „0” możemy zmieniać wedle uznania.
Innym sposobem na stworzenie przezroczystego toolbara jest stworzenie pliku fullscreen_toolbar_bg_gradient w folderze drawable
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <gradient android:angle="90" android:startColor="@android:color/transparent" android:endColor="@android:color/transparent" android:type="linear" /> </shape>
A w pliku odpowiedzialnym za styl toolbara zmieniamy/dodajemy na:
android:background="@drawable/fullscreen_toolbar_bg_gradient"
Ewentualnie jeszcze prościej tylko zmieniamy/dodajemy do toolbara:
android:background="@android:color/transparent"
To tylko trzy sposoby, może być ich więcej. Który użyjesz to już Ty decydujesz. Również to zależy od projektu. Na przykład w jednej aktywności potrzebujesz użyć przezroczystości w drugiej zaś nie. Aby nie tworzyć kilku toolbarów można skorzystać z wersji pierwszej. Jeśli potrzebujesz wszędzie przezroczystość i mało kodu wybierz trzeci sposób.
5. Reakcja na przesuwanie.
Ciekawy również efekt możemy dostać dla przewijania ekranu. Więcej na ten temat znajdziesz w tym artykule.