LogicGateApp cz.3

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 🙂
layout
Edytujemy zawartość pliku strings.xml dodając napisy niezbędne dla przycisków.
strings2

Edytujemy zawartość pliku tak by osiągnąć zamierzony wygląd naszej aktywności.

layoutxml

Kod xml odpowiada za taki wygląd layoutu.

layout_graphic

about_author_layout.xml

Tworzymy nowy plik: about_author_layout.xml
Katalog pliku to: res->layout

aboutAuthorxml

Dodajemy napisy do strings.xml

strings3

Dodajemy style do app_styles.xml odpowiedzialne za formatowanie tekstu w layoucie.

styles2xml

Dodatkowo tworzymy plik color.xml w katalogu res->values. Plik zawiera  definicje kolorów które możemy używać w aplikacji.

color1

Wygląd:

aboutAuthorGraphic

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

manifest1

AboutAuthorActivity

manifest2

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

logcattest

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s