An ACTIVITY in android ( ANDROID APP DEVELOPMENT BY PRESENTATION )

Post on 10-May-2017

216 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

Transcript

AN ACTIVITY IN ANDROID

A C T I V I T Y

An Activity is a window that contains the user interface of our application.

An Android application can have one or more activities.

Just like an applet, an Activity also has several stages in it’s life cycle

What Is An Activity ?

How an Activity is created ?

To create an Activity we create a java class

that extends the Activity class

available in the package android.app

MainActivity.java

package com.example.myfirstapp;

import android.os.Bundle;import android.app.Activity;import android.view.Menu;

public class MainActivity extends Activity {

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }

MainActivity.java

@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }

Code Explained

The onCreate() method is called by the Android system when our Activity starts

It is where we should perform all initialization and UI setup.

It is compulsory for a programmer to call the super.onCreate() method so that Android Run Time can perform basic set up for our Activity

Code Explained

After initial setup our class has to load the user interface elements which can be done in 2 ways:

1. Using Programmatic layout

2. Using XML based layout

In the the first approach we use java code to set layout of our components

Programmatic Layout Demopackage com.example.demo2;

import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.widget.TextView;

public class MainActivity extends Activity {

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText("My First Android App"); setContentView(tv); }

Programmatic Layout Demo @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }

Code Explained

The first line creates an Object of “TextView” which is a non editable text, similar to JLabel component of

java swing.

The “TextView” constructor accepts an Android “Context” instance as its

parameter. A Context is a handle to the system; it provides services like

resolving resources, obtaining access to databases and preferences, and so on.

Code Explained

The Activity class inherits from Context, and because our MainActivity class is a subclass of Activity, it is also a Context.

So, we can pass this as our Context reference to the TextView.

In the next line we call the “setText()”method to set text in TextView

Code Explained

Finally, we pass the TextView to setContentView() in order to display it as the content for the Activity UI. If our Activity doesn't call this method, then

no UI is present and the system will display a blank

screen.

Code Explained

Although we can use this type of Programmatic Layout in our code

but the Android specification does not recommend it.

This is because small changes in the layout can result in big source

code headaches.

Code Explained

Thus the preferred approach is to use XML based layouts so that event handling code is

separated from user interface code.

The user interface by default is defined in a file called “activity_main.xml” and to load

this user interface we call the method setContentView(R.layout.activity_main);

activity_main.xml<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" >

<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" />

</RelativeLayout>

Explanation Of “activity_main.xml”

The first line is the regular xml directive indicating the XML version along with the tag

<RelativeLayout>.

Layout is a technique to arrange our components on the page. There are several layouts available like LinearLayout,TableLayout,AbsoluteLayout,

The default is RelativeLayout

Code Explained

In the <RelativeLayout> tag we also use the xmlns:android with the value

http://schemas.android.com/apk/res/android

It is the default setting and compulsory to be able to use

other elements in “activity_main.xml”

Code Explained• After that we have 2 attributes :android:layout_width="match_parent“android:layout_height="match_parent"• The layout_width and layout_height

components are set to match_parent which tells the layout to stretch the activity size to match it’s container which is the screen itself

Code Explained• Following it we have 4 attributes:

android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"

• These attributes set the distance between the contents and the borders of the relative layout window i.e the Activity.

• Their values have been set to attributes defined in dimens.xml

Code Explained• TextView describes an area where text can be

displayed . It resembles the Labels in java swings.Within the TextView definition:android:layout_width=“wrap_content" android:layout_height="wrap_content" define a width and height for the TextView box.android:text="@string/hello"provides some text to display in the TextView. The actual string is defined in a separate file, res/values/strings.xml.

Providing Id To ViewsThe components which we create in our XML file might need to be accessed in java code. In this case one more important property has to be set called as android:idTo set it the general syntax is: android:id=“@+id/someid”Also when we set it the R.java file also gets updated

Accessing Views In Java Code

After creating views(gui components) in XML file, we frequently need to refer to them in our java code to manipulate their properties or for other tasks. This can be done using the method findViewById() provided by the Activity class

Accessing Views In Java Code

It’s prototype is:public View findViewById (int id)The argument passed to this method is id of the component as specified in R.java. For example if we have a TextView with id “t1” set in XML file then the call would be:

findViewById(R.id.t1);

Accessing Views In Java Code

The return value of findViewById() is a reference to the specified view if it is found , otherwise it returns null. Moreover since return type of the method is View we need to downcast it to specific component.So the complete call would be:TextView tv; tv=(TextView)findViewById(R.id.t1);

Example 2Write an android mobile app to display current date and time in a TextView.

“activity_main.xml”<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >

<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/txtDisplay"/></LinearLayout>

DisplayDateTimeActivity.javapackage alex.cruger.androidapp;import java.util.Date;import android.app.Activity;import android.os.Bundle;import android.widget.TextView;

public class DisplayDateTimeActivity extends Activity {@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); TextView tv=(TextView)findViewById(R.id.txtDisplay); Date today=new Date(); tv.setText(today.toString()); }}

The Button ViewButtons in android can be created using the Button class , which is a derived class of TextView. This class is available in the package android.widget. Just like other GUI programming languages, Buttons in android also are the most important components for generating events.

Creating A ButtonTo create a Button to the Activity, we can use the following code in XML file:

<Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click Me" />

Positioning The ButtonWritng the above code will place the button at the top left corner which may overlap it on an existing control.

To avoid this we must tell android to place the newly created “BUTTON” view towards left,right,below or above the present control.

Positioning The ButtonFor this android provides us 4 attributes of “Button”1.android:layout_toLeftOf2.android:layout_toRightOf3.android:layout_below4.android:layout_above The value assigned to these attributes is the id of the component with respect to which the button needs to be placed

Positioning The ButtonSo the complete code becomes <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello" android:id="@+id/msg"/>

<Button android:id="@+id/mybtn" android:text="Click me" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/msg“ />

Event Handling Events are the actions a user takes at the run time of our app. Like clicking a Button, Tapping on screen, typing text in EditText(TextField) etc. Event Handling Now if our application wants to respond to those events i.e. execute some piece of code in response to the event then we perform Event Handling

Event Handling With Button

To perform event handling with Button, android follows the same approach as Java.Here are major steps in handling Button click event:1. Implement the interface OnClickListener2. Override the onClick() method3. Register the respective Button as source and

implementing class as listener by calling setOnClickListener()

Example 3Write an android mobile app to display a Button titled “Click Me” and when it is clicked the Button’s title should display current Date and Time.

“main.xml”<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >

<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" />

<Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click Me" />

</LinearLayout>

DisplayDateTimeActivity.javapackage alex.kruger.androidapps;import java.util.Date;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;

public class DisplayDateTimeButtonActivity extends Activity implements OnClickListener { private Button b1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b1=(Button)findViewById(R.id.btn1); b1.setOnClickListener(this); }

public void onClick(View arg0) {

Date today=new Date();b1.setText(today.toString());}}

Example 4Write an android mobile app to display a Button titled “Click Me” and when it is clicked a TextView should display number of times button has been clicked.

“main.xml”<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" />

<TextView android:id="@+id/t1" android:layout_width="302dp" android:layout_height="wrap_content" android:text="0" />

<Button android:id="@+id/button1" android:layout_width="99dp" android:layout_height="32dp" android:text="Click Me" /></LinearLayout>

ClickCountActivity.javapackage kapoor.sachin.androidapps;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;

public class ClickCountActivity extends Activity implements OnClickListener { private TextView tv; private Button b1; private int count;

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv=(TextView)findViewById(R.id.t1); b1=(Button)findViewById(R.id.button1); b1.setOnClickListener(this); }

public void onClick(View arg0) {

++count;tv.setText(String.valueOf(count));}}

Handling Multiple SourcesIf we have set multiple sources(like buttons) for a single event then we use the method getId() of the View class whose object is passed as an argument to the method onClick() . This method returns the id of the widget which triggered the event. The prototype of the method is:public int getId()This id can then be compared with R.id values to determine the specific widget.

Example 5Write an android mobile app to display 2 Buttons titled “Increase” and “Decrease” which when clicked increment and decrement the counter accordingly.

“main.xml”<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >

<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" />

<TextView android:id="@+id/t1" android:layout_width="232dp" android:layout_height="wrap_content" android:text="0" />

<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="34dp" android:text="Increase" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="32dp" android:text="Decrease" />

</LinearLayout>

“MultiSourceActivity.java”package kapoor.sachin.androidapps;

import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;

public class MultiSourceActivity extends Activity implements OnClickListener{ Button b1,b2; TextView tv; int count;

@Overridepublic void onCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); b1=(Button)findViewById(R.id.button1); b2=(Button)findViewById(R.id.button2); tv=(TextView)findViewById(R.id.t1); b1.setOnClickListener(this); b2.setOnClickListener(this);}

public void onClick(View v) {int source=v.getId();switch(source){case R.id.button1:++count;break;case R.id.button2:--count;break;}tv.setText(String.valueOf(count));

}}

Alternate Way Of Event Handling

Rather than using the OnClickListener we have an alternate way of handling events also using XML file. It’s as follows:1. Assign a method to your button in the XML layout, using the android:onClick attribute. For example: <Button     android:layout_height="wrap_content"     android:layout_width="wrap_content"     android:text=“Click Me"     android:onClick=“myClick" />

2. Now, when a user clicks the button, the Android system calls the activity's myClick(View) method. In order for this to work, the method must be public and accept a View as its only parameter. For example: public void myClick(View v) { // code } The View passed into the method is a reference to the widget that was clicked.

top related