Multiplication Table Generator contains the EditText-ipNumberTxt component for reading user input – a number. It contains two Buttons '+' and '–' to increment/decrement the number in EditText. The generated output is displayed in TextView-outputTXT. The multiplication table is generated on afterTextChanged event of EditText field.
AndroidManifest.xml file :
An
Android application is described the file "AndroidManifest.xml". This file must declare all
activities, services, broadcast receivers and content provider of the
application. It must also contain the required permissions for the application.
Make sure
the AndroidManifest.xml file contains following piece of information.
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<activity android:name=".FirstAndroid1Activity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"
/>
<category android:name="android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
</application>
GUI Creation
GUI creation is done via the rich editor
provided on ADT. The GUI code generated in XML works
much similar to HTML.
The UI contains RelativeLayout for
control Buttons, EditText and upper
TextView
component. For displaying output
The UI("res/layout/main.xml") has
following Structure:
<LinearLayout>
<RelativeLayout>
<TextView> App
Name at Top </TextView>
<Button> +
Button </Button>
<EditText> Input
Text Field </EditText>
<Button> -
Button </Button>
</RelativeLayout>
<TextView> Result Area </TextView>
</LinearLayout>
String attributes
Android
allows you to create attributes for resources, e.g. for strings and / or
colors. These attributes can be used in your UI definition via XML or in your
Java source code. The file "res/values/string.xml" contains such attributes.
Our
string.xml file :
<?xml
version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Welcome
to Multiplication Table App</string>
<string name="app_name">Multiplication
Table</string>
<string name="genButton">Generate
Table</string>
<string name="inc">+</string>
<string name="dec">-</string>
</resources>
These
string resources are applied to UI components using following tag :
android:text="@string/NAME_OF_ATTRIBUTE_ON_STRING.XML_FILE"
eg : The
following sets ‘+’ to incButton.
<!-- Increment Button -->
<Button android:id="@+id/incButton"
android:text="@string/inc">
</Button>
Main
Activity Class
Activity represents the presentation
layer of an Android application, e.g. a screen which the user sees. An Android
application can have several activities and it can be switched between them
during runtime of the application.
// FirstAndroid1Activity.java
public class FirstAndroid1Activity extends Activity {
Button incButton, decButton;
EditText ipNumberTxt;
TextView outputTXT;
/** Called when the activity is first created. */
@Override
public void
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// get resources
incButton = (Button) findViewById(R.id.incButton);
decButton = (Button) findViewById(R.id.decButton);
ipNumberTxt = (EditText) findViewById(R.id.inputNumber);
outputTXT = (TextView) findViewById(R.id.outputTXT);
}
}
ButtonClickListener for INC/DEC buttons
To change values to ipNumberTxt on onClick event of incButton and decButton, create following class MultiplicationTableButtonClickListener which implements OnClickListener interface.
// MultiplicationTableButtonClickListener.java
public class MultiplicationTableButtonClickListener
implements
OnClickListener {
EditText valueField;
boolean isIncreaseBtn;
public MultiplicationTableButtonClickListener(
EditText valueField, boolean
isIncreaseBtn) {
this.valueField
= valueField;
this.isIncreaseBtn
= isIncreaseBtn;
}
@Override
public void
onClick(View v) {
String strVal = valueField.getText().toString().trim();
int intVal = 0;
if (!strVal.isEmpty()) {
intVal =
Integer.parseInt(strVal);
}
// change value, do not need to calculate multiplication
table
if (isIncreaseBtn)
{
valueField.setText(String.valueOf(++intVal));
} else {
valueField.setText(String.valueOf(--intVal));
}
}
}
Add following
code to FirstAndroid1Activity class
incListener = new
MultiplicationTableButtonClickListener(ipNumberTxt,
true);
decListener = new
MultiplicationTableButtonClickListener(ipNumberTxt,
false);
incButton.setOnClickListener(incListener);
decButton.setOnClickListener(decListener);
The multiplication table logic :
Create a class with public static String getStringTable(int
n) method.
// MultiplicationTable.java
public class MultiplicationTable {
public static
String getStringTable(int n) {
StringBuilder sb = new StringBuilder();
for (int
i = 1; i <= 10; i++) {
sb.append(n + " x " + i + "
= " + i * n + "\n");
}
return sb.toString();
}
}
TextWatcher Implementation :
To generate multiplication table on
afterTextChanged event, create following class MultiplicationListener which implements TextWatcher
interface.
// MultiplicationListener.java
public class MultiplicationListener implements TextWatcher {
TextView textView;
EditText valueField;
public MultiplicationListener(TextView
textView, EditText valueField) {
this.textView
= textView;
this.valueField
= valueField;
}
@Override
public void
afterTextChanged(Editable s) {
String number = valueField.getText().toString().trim();
if (!number.isEmpty() &&
!number.equals("0")) {
textView.setText(MultiplicationTable.getStringTable(Integer.parseInt(number)));
}
}
@Override
public void
beforeTextChanged(CharSequence s, int
start, int count, int after) {
}
@Override
public void
onTextChanged(CharSequence s, int
start, int before, int count) { }
}
Add the following lines of code
on FirstAndroid1Activity class
// TextWatcher listener
MultiplicationListener mulListener;
mulListener = new MultiplicationListener(outputTXT, ipNumberTxt);
ipNumberTxt.addTextChangedListener(mulListener);
NOTE: In MultiplicationTableButtonClickListener, we just change the value on input fields. The generation
of new table is done automatically because we are adding MultiplicationListener(implementation of TextWatcher
interface).
Download the project code from here.
No comments :
Post a Comment
Your Comment and Question will help to make this blog better...