Kurs Android (9)

Autor: Damian Chodorek • Opublikowany: 29 maja 2015 • Ostatnia aktualizacja: 9 sierpnia 2015 • Kategoria: android, kursy

Pasek nawigacji/akcji czyli Action Bar. Część 2.

Ten artykuł jest kontynuacją poprzedniego, który znajdziesz tutaj.

Na początku upewnij się, że masz przygotowany projekt z poprzedniej części, ponieważ będziemy kontynuować jego rozbudowę.

Dynamiczny Action Bar

Co jeśli chcesz ustawić własny layout jako pasek nawigacji? W takim wypadku musisz skorzystać z metody setCustomView() klasy ActionView. Ponadto musisz włączyć obsługę własnego layoutu w pasku nawigacji poprzez metodę setDisplayOptions(), której powinieneś przekazać flagę ActionBar.DISPLAY_SHOW_CUSTOM.

W projekcie, z poprzedniej części kursu, utwórz nowy plik res/layouyt/search_field.xml i zdefiniuj go jak poniżej.

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/search_field"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:inputType="textFilter" >

</EditText> 

Teraz zmień zawartość metody onCreate() w klasie MainActivity zgodnie z poniższym kodem.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
        
    ActionBar actionBar = getActionBar();
        
    // ustawiamy własny layout
    actionBar.setCustomView(R.layout.search_field);

    // ustawiamy flagę
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM
        | ActionBar.DISPLAY_SHOW_HOME);
}

Uruchom aplikację. W pasku nawigacji powinieneś mieć możliwość wpisania tekstu.

Menu kontekstowe

Kontekstowe menu pojawia się w momencie, gdy użytkownik wybierze konkretny element. Przykładem jest zaznaczenie i przytrzymanie tekstu. Standardowo pojawia się wtedy kontekstowe menu, które pozwala skopiować lub wyciąć zaznaczenie. Przykład na rysunku poniżej.

Stwórzmy więc własne kontekstowe menu. Pierwszym krokiem jest jego definicja. Utwórz plik res/menu/context_menu.xml i uzupełnij go zgodnie z kodem poniżej.

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.damianchodorek.kurs.android8.MainActivity" >

    <item
        android:id="@+id/action_add"
        android:icon="@android:drawable/btn_radio"
        android:orderInCategory="100"
        android:showAsAction="always"
        android:title="Menu kontekstowe"/>

</menu>

Teraz zmień metodę onCreate() w klasie MainActivity tak jak poniżej.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
        
    // poniższy obiekt odpowiada za cykl życia menu kontekstowego
    final ActionMode.Callback mActionModeCallback = new ActionMode.Callback() {

        // metoda tworzy menu kontekstowe
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
                
            // ustawiamy własne menu kontekstowe
            MenuInflater inflater = mode.getMenuInflater();
            inflater.inflate(R.menu.context_menu, menu);
            return true;
        }

        // metoda uruchamiana przy każdym pojawieniu się menu kontekstowego
        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        // metoda uruchamiana po wybraniu elementu menu
        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
                
            // przeprowadzamy operacje
            Toast.makeText(MainActivity.this, "Przeprowadzenie operacji", Toast.LENGTH_SHORT).show();
            mode.finish();
                
            return false;
        }
        
        // metoda uruchamiana przy wyjściu z menu
        @Override
        public void onDestroyActionMode(ActionMode mode) {
        }
    };

    // po przytrzymaniu przycisku włączy się menu kontekstowe
    findViewById(R.id.button).setOnLongClickListener(new View.OnLongClickListener() {

        // metoda uruchamiana po dłuższym przytrzymaniu elementu przez użytkownika
        public boolean onLongClick(View view) {

            // tutaj włączamy menu kontekstowe
            startActionMode(mActionModeCallback);
            view.setSelected(true);

            return true;
        }

    });
        
}

Po dłuższym przytrzymaniu naszego przycisku ukryj/pokaż włączy się menu kontekstowe. Po wybraniu przycisku z nowego menu pojawi się komunikat Przeprowadzenie operacji.

Więcej o menu kontekstowym przeczytasz na stronie http://developer.android.com/guide/topics/ui/menus.html#CAB. Znajduje się tam również przykład jak je zastosować do elementów listy.

W tej części to wszystko. Dowiedziałeś się jak stworzyć własny layout dla menu oraz poznałeś ideę menu kontekstowego.

część 10

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.