Omówienie treści
W tym poście zajmiemy się stworzeniem nowych aktywności, które będą mogły być włączane przez menu główne nasze aplikacji. Tworzenie aktywności składać się będzie z:
- utworzenia klasy dziedziczącej po Activity
- utworzenia layoutu strony
- dodania wpisu w AndroidManifest.xml
Na końcu postu podepniemy odpalanie aktywności do aktywności stworzonej w poprzednim poście.
Tworzymy layout naszych aktywności
chose_gate_layout.xml
Tworzymy nowy plik: chose_gate_layout.xml
Katalog pliku to: res->layout
Do katalogu drawable-hdpi wklejam zdjęcie które wykorzystam w stronie o autorze 🙂
Edytujemy zawartość pliku strings.xml dodając napisy niezbędne dla przycisków.
Edytujemy zawartość pliku tak by osiągnąć zamierzony wygląd naszej aktywności.
Kod xml odpowiada za taki wygląd layoutu.
about_author_layout.xml
Tworzymy nowy plik: about_author_layout.xml
Katalog pliku to: res->layout
Dodajemy napisy do strings.xml
Dodajemy style do app_styles.xml odpowiedzialne za formatowanie tekstu w layoucie.
Dodatkowo tworzymy plik color.xml w katalogu res->values. Plik zawiera definicje kolorów które możemy używać w aplikacji.
Wygląd:
Tworzymy klasy
ChoseGateActivity
Dodajemy do pakietu naszej aplikacji klasę ChoseGateActivity :
package com.adam_mistal.logicgateapp; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.Button; public class ChoseGateActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.chose_gate_layout); initButtons(); } private void initButtons() { final Button andButton = (Button) findViewById(R.id.and_button); andButton.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { Log.i("ChoseGateActivity", "and"); } return false; } }); final Button orButton = (Button) findViewById(R.id.or_button); orButton.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { Log.i("ChoseGateActivity", "or"); } return false; } }); final Button notButton = (Button) findViewById(R.id.not_button); notButton.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { Log.i("ChoseGateActivity", "not"); } return false; } }); final Button nandButton = (Button) findViewById(R.id.nand_button); nandButton.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { Log.i("ChoseGateActivity", "nand"); } return false; } }); final Button xorButton = (Button) findViewById(R.id.xor_button); xorButton.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { Log.i("ChoseGateActivity", "xor"); } return false; } }); final Button returnButton = (Button) findViewById(R.id.return_button); returnButton.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { Log.i("ChoseGateActivity", "return"); finish(); } return false; } }); } }
Analogicznie jak w głównej aktywności w metodzie initControls() łącze kod xml z kodem java. W 81 linijce użyłem metody finish() która zgodnie z intencjią czyli po naciśnięciu przycisku “Wróć” zamknie aktywność po czym przywołana zostanie aktywność poprzednia czyli MainActivity
AboutAuthorActivity
Dodajemy do pakietu naszej aplikacji klasę AboutAuthorActivity :
package com.adam_mistal.logicgateapp; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.Button; public class AboutAuthorActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.about_author); initButtons(); } private void initButtons() { final Button backButton = (Button) findViewById(R.id.return_button); backButton.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { Log.i("AboutAuthorActivity", "return"); finish(); } return false; } }); } }
Dodajemy wpisy w AndroidManifest.xml
LogicGateActivity
AboutAuthorActivity
Podpinamy włączenie aktywności do MainActivity
W klasie MainActivity edytujemy:
final Button startButton = (Button) findViewById(R.id.start_button); startButton.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { Log.i("MainActivity", "startButton"); Intent intent=new Intent(getBaseContext(),ChoseGateActivity.class); startActivity(intent); } return false; } }); final Button authorButton = (Button) findViewById(R.id.author_button); authorButton.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { Log.i("MainActivity", "authorButton"); Intent intent=new Intent(getBaseContext(),AboutAuthorActivity.class); startActivity(intent); } return false; } }); final Button closeButton = (Button) findViewById(R.id.close_button); closeButton.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { Log.i("MainActivity", "closeButton"); finish(); } return false; } });
Odpalenie nowej aktywności osiągamy poprzez wywołanie metody startActivity pobierającej jako parametr obiekt typu Intent.
Konstruktor klasy Intent pobiera jako parametry obiekt typu Context oraz klasę która ma być wykonana.
Test
Przykładowy wygląd okna LogCat