Android Program Structure

stuckwarmersMobile - sans fil

14 déc. 2013 (il y a 3 années et 5 mois)

150 vue(s)

CE53105
-
3 Applied Communications Technology

Android lecture 2
-

Structures


Android File structure


Resources


Drawables


Layout


Values


R Class


Manifest


Running programs


DDMS (

Dalvik Debug Monitor Server

)


Explaining Interesting things in Notes3



Android File Structure

Source folder


all java files you create

Your Project


Should be a unique name

Individual Java source files

Generated folder


R class here


leave alone

Resource folder


XML files defining resources

Source objects for Android platform target

The Manifest


Declares all bits of project

Drawable Folders


Picture, image, icons etc

Values folder


In this case a strings XML doc

Layout XML files


Used by Activities to define screens

Drawable Folders


Contains images that will be used in your
programs


Generally three (or one)


Drawable
-
hdpi


high resolution screen


Drawable

mdpi


medium resolution


Drawable
-

ldpi


low resolution


Means you may need several versions of your
image to suit the screen resolution!


Becoming a problem as sizes proliferate


Referenced using the R class

Layout folder


Contains XML documents that define the layout of a particular
view.


Activity’s utilise views by the setcontextview statement.


setContentView(R.layout.tigger1);


Layouts can be complex and difficult to build


DroidDraw
-

http://www.droiddraw.org

?xml version=
"1.0" encoding="utf
-
8"?>

<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"


android:orientation=
"vertical"


android:layout_width=
"fill_parent"


android:layout_height=
"fill_parent"


>

<TextView


android:layout_width=
"fill_parent"


android:layout_height=
"wrap_content"


android:text=
"@string/hello"


/>

</LinearLayout>


Values


Files containing tuples of data


name and value
Name



Hello
value



Hello World


Can be simple or complex data
items


Arrays, menus etc


<?xml version="1.0" encoding="utf
-
8"?>

<menu
xmlns:android="http://schemas.android.com/apk/res/android">





<item android:id="@+id/new_game"











android:icon="@drawable/ic_new_game"











android:title="@string/new_game" />





<item android:id="@+id/quit"











android:icon="@drawable/ic_quit"











android:title="@string/quit" />

</menu>

<?xml version=
"1.0" encoding="utf
-
8"?>

<resources>


<string name=
"hello">Hello World,
Viewdemo!</string>


<string name=
"app_name">
Viewdemo</string>


<string
-
array name=
"countries_array">


<item>
Bahrain</item>


<item>Bangladesh</item>


<item>Barbados</item>


<item>
Belarus</item>


<item>Belgium</item>


<item>
Belize</item>


<item>
Benin</item>


</string
-
array>

</resources>

The R Class


contains resource IDs for all the
resources in your res/ directory


Generated by aapt
(Android Asset Packaging
Tool)


For each type of resource, there is
an R subclass


for each resource of that type,
there is a static integer


To use the resource simply add it
to your code


R.string.hello or 0x7f040000


R.layout.linearlayoutdemo or
0x7f030000


R.array.countries_array or 0x7f050000


Means that you can change
details without having to
change the code!

/* AUTO
-
GENERATED FILE. DO NOT MODIFY.


package ac.uk.ere1.Viewdemo;


public final class R {


public static final class array {


public static final int countries_array=0x7f050000;


}


public static final class attr {


}


public static final class drawable {


public static final int icon=0x7f020000;


}


public static final class id {


public static final int entry=0x7f060001;


public static final int label=0x7f060000;


public static final int ok=0x7f060002;


}


public static final class layout {


public static final int linearlayoutdemo=0x7f030000;


public static final int list_item=0x7f030001;


public static final int main=0x7f030002;


public static final int relativelayoutdemo=0x7f030003;


}


public static final class string {


public static final int app_name=0x7f040001;


public static final int hello=0x7f040000;


}

}

The DDMS Perspective

Emulators Running

Emulator controls


can simulate
various phone
actions eg
receiving a call or
gaining GPS input

Directory Structure
of emulator (can
push and pull files)

Log provides useful
information on
what is happening
live!

Android Manifest

<?xml version=
"1.0" encoding="utf
-
8"?>

<manifest xmlns:android=
"http://schemas.android.com/apk/res/android"


package=
"ac.uk.ere1.Viewdemo"


android:versionCode=
"1"


android:versionName=
"1.0“



<application android:icon=
"@drawable/icon" android:label="@string/app_name">


<activity android:name=
".Viewdemo"


android:label=
"@string/app_name">


<intent
-
filter>


<action android:name=
"android.intent.action.MAIN" />


<category android:name=
"android.intent.category.LAUNCHER" />


</intent
-
filter>


</activity>


<activity


android:name=
"Listview" />


<activity


android:name=
"Linearlayout" />


<activity


android:name=
"Relativelayout" />


<!
--

<activity


android:name="
Tablelayout" />


<activity android:name="
Gridview" />


<activity android:name="
Tablayout" />

--
> </application>


<uses
-
permission android:name=
"android.permission.CHANGE_WIFI_STATE" />


<uses
-
permission android:name=
"android.permission.ACCESS_WIFI_STATE" />


<uses
-
permission android:name=
"android.permission.BATTERY_STATS" />


<uses
-
sdk android:minSdkVersion=
"3"></uses
-
sdk>

</manifest>


Package definition

Intent Filter defines
what it can do

Permissions Required

Activities Commented out

Activities

Notepadv3 Key Points

<?xml version=
"1.0" encoding="utf
-
8"?>

<manifest xmlns:android=
"http://schemas.android.com/apk/res/android"
package="com.android.demo.notepad3">


<application android:icon=
"@drawable/icon">


<activity android:name=
".Notepadv3" android:label="@string/app_name">


<intent
-
filter>


<action android:name=
"android.intent.action.MAIN" />


<category android:name=
"android.intent.category.LAUNCHER" />


</intent
-
filter>


</activity>


<activity android:name=
".NoteEdit" />


</application>

</manifest>

Notepadv3 (cont)

1
-

@overide


places an existing definition of the method.

2
-

super is the root definition and is called to ensure all methods and
properties are properly instantiated.

3
-

setContentview(
R.layout.notes_list
)



used to define the view being used by the activity.

In this case note_list!

4
-

a
-

call to a method defined in this class.


b
-

the method definition.

5
-

Intent starting a new activity (
ACTIVITY_CREATE
)

Note it expects the activity to return a result!

6
-

Intent starting a new activity (
ACTIVITY_EDIT
)

Also expecting a result to be returned.

Note i.putExtra method


allows data to be transmitted to activity.

7
-

The method dealing with the result returned.

8
-

Have to create ‘listeners’ for each view item


problematical!