0% found this document useful (0 votes)
77 views51 pages

Android Unit 4

The document discusses different UI controls in Android including TextView, EditText, and Button. It provides descriptions of TextView and EditText, listing some of their key attributes. It also includes code samples to display text using a TextView and accept user input using an EditText. The summary is: 1. The document discusses TextView, EditText, and Button controls in Android and lists some of their important attributes. 2. It provides code samples to display text using a TextView and accept user input with an EditText. 3. Key attributes of these controls include ID, text size, color, gravity, input type, and onClick listeners.

Uploaded by

Bilal Pathan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
77 views51 pages

Android Unit 4

The document discusses different UI controls in Android including TextView, EditText, and Button. It provides descriptions of TextView and EditText, listing some of their key attributes. It also includes code samples to display text using a TextView and accept user input using an EditText. The summary is: 1. The document discusses TextView, EditText, and Button controls in Android and lists some of their important attributes. 2. It provides code samples to display text using a TextView and accept user input with an EditText. 3. Key attributes of these controls include ID, text size, color, gravity, input type, and onClick listeners.

Uploaded by

Bilal Pathan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 51

1.

Text View
In android, Text View is a user interface control which is used to set and display the text to the
user based on our requirements. The Text View control will act as like label control and it won’t
allow users to edit the text.
A Text View is a entire text editor, however the basic class is configured to not allow editing

It inherits all TextView attributes


Inherits all TextView methods(setText(),getText())

Attributes of TextView
Sr.No. Attribute & Description

1
android:id
This is the ID which uniquely identifies the control.

2
android:capitalize
If set, specifies that this TextView has a textual input method and should automatically capitalize
what the user types.

 Don't automatically capitalize anything - 0


 Capitalize the first word of each sentence - 1
 Capitalize the first letter of every word - 2
 Capitalize every character - 3

3
android:cursorVisible
Makes the cursor visible (the default) or invisible. Default is false.

4
android:editable
If set to true, specifies that this TextView has an input method.

5
android:fontFamily
Font family (named by string) for the text.

6
android:gravity
Specifies how to align the text by the view's x- and/or y-axis when the text is smaller than the view.

7
android:hint
Hint text to display when the text is empty.

1 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


8
android:inputType
The type of data being placed in a text field. Phone, Date, Time, Number, Password etc.

9
android:maxHeight
Makes the TextView be at most this many pixels tall.

10
android:maxWidth
Makes the TextView be at most this many pixels wide.

11
android:minHeight
Makes the TextView be at least this many pixels tall.

12
android:minWidth
Makes the TextView be at least this many pixels wide.

13
android:password
Whether the characters of the field are displayed as password dots instead of themselves. Possible
value either "true" or "false".

14
android:phoneNumber
If set, specifies that this TextView has a phone number input method. Possible value either "true"
or "false".

15
android:text
Text to display.

16
android:textAllCaps
Present the text in ALL CAPS. Possible value either "true" or "false".

17
android:textColor
Text color. May be a color value, in the form of "#rgb", "#argb", "#rrggbb", or "#aarrggbb".

18
android:textColorHighlight
Color of the text selection highlight.

19
android:textColorHint

2 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


Color of the hint text. May be a color value, in the form of "#rgb", "#argb", "#rrggbb", or
"#aarrggbb".

20
android:textIsSelectable
Indicates that the content of a non-editable text can be selected. Possible value either "true" or
"false".

21
android:textSize
Size of the text. Recommended dimension type for text is "sp" for scaled-pixels (example: 15sp).

22
android:textStyle
Style (bold, italic, bolditalic) for the text. You can use or more of the following values separated by
'|'.

 normal - 0
 bold - 1
 italic - 2

23
android:typeface
Typeface (normal, sans, serif, monospace) for the text. You can use or more of the following values
separated by '|'.

 normal - 0
 sans - 1
 serif - 2
 monospace - 3

Program to print Hello World in Android


Activity_main.xml File
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
3 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani
android:text="HelloWorld!"
android:gravity="center"
android:layout_gravity="center"
android:layout_marginTop="350dp"
android:textColor="#000000"
android:textSize="30dp"
android:textStyle="italic"/>
</LinearLayout>

MainActivity.java File

package com.example.textviewexample;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

Output

4 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


Edit Text
EditText is a user interface control which is used to allow the user to enter or modify the text.
While using EditText control in our android applications, we need to specify the type of data the
text field can accept using inputType attribute.

EditText Attributes

Sr. Attribute & Description


No

1
android:autoText
If set, specifies that this TextView has a textual input method and automatically corrects some
common spelling errors.

2
android:drawableBottom
This is the drawable to be drawn below the text.

3
android:drawableRight
This is the drawable to be drawn to the right of the text.

4
android:editable
If set, specifies that this TextView has an input method.

5
android:text
This is the Text to display.

Inherited from android.view.View Class −

Sr.No Attribute & Description

1
android:background
This is a drawable to use as the background.

5 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


2
android:contentDescription
This defines text that briefly describes content of the view.

3
android:id
This supplies an identifier name for this view.

4
android:onClick
This is the name of the method in this View's context to invoke when the view is clicked.

5 android:visibility
This controls the initial visibility of the view.

Following will be the content of res/layout/activity_main.xml file −


<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:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="14dp"
android:layout_marginTop="18dp"
android:text="EditText Example" />

<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"

6 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


android:layout_marginTop="130dp"
android:text="Click" />

<EditText
android:id="@+id/edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button"
android:layout_below="@+id/textView1"
android:layout_marginTop="61dp"
android:ems="10"
android:text="@string/enter_text" android:inputType="text" />

</RelativeLayout>

MainActivity.java File

package com.example.demo;

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

import android.view.View;
import android.view.View.OnClickListener;

import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {


EditText eText;
Button btn;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
eText = (EditText) findViewById(R.id.edittext);
btn = (Button) findViewById(R.id.button);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String str = eText.getText().toString();
Toast msg = Toast.makeText(getBaseContext(),str,Toast.LENGTH_LONG);
msg.show();

7 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


}
});
}
}
Output

8 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


Button
A Button is a Push-button which can be pressed, or clicked, by the user to perform an action.

Button Attributes

Following are the important attributes related to Button control. You can check Android official
documentation for complete list of attributes and related methods which you can use to change
these attributes are run time.
Inherited from android.widget.TextView Class −

Sr.No Attribute & Description

1
android:autoText
If set, specifies that this TextView has a textual input method and automatically corrects some
common spelling errors.

2
android:drawableBottom
This is the drawable to be drawn below the text.

3
android:drawableRight
This is the drawable to be drawn to the right of the text.

4
android:editable
If set, specifies that this TextView has an input method.

5
android:text
This is the Text to display.

Inherited from android.view.View Class −

Attribute Description

1
android:background

9 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


This is a drawable to use as the background.

2
android:contentDescription
This defines text that briefly describes content of the view.

3
android:id
This supplies an identifier name for this view.

4
android:onClick
This is the name of the method in this View's context to invoke when the view is
clicked.

5
android:visibility
This controls the initial visibility of the view.

Example:Click on Button Toast message will display Welcome in GGSP


Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
tools:context=".MainActivity">

<Button
android:id="@+id/b1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click Me!"
android:gravity="center"

/>
</LinearLayout>

10 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


MainActivity.java

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

Button b1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1=findViewById(R.id.b1);

b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "Welcome in GGSP",
Toast.LENGTH_SHORT).show();
}
});
}
}

Output

11 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


ImageButton
An ImageButton is an AbsoluteLayout which enables you to specify the exact location of its
children. This shows a button with an image (instead of text) that can be pressed or clicked by
the user.

Android button style set

ImageButton Attributes

Following are the important attributes related to ImageButton control. You can check Android
official documentation for complete list of attributes and related methods which you can use to
change these attributes are run time.
Inherited from android.widget.ImageView Class −

Sr.No Attribute & Description

android:adjustViewBounds
1
Set this to true if you want the ImageView to adjust its bounds to preserve the aspect ratio of its
drawable.

2 android:baseline

12 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


This is the offset of the baseline within this view.

android:baselineAlignBottom
3
If true, the image view will be baseline aligned with based on its bottom edge.

android:cropToPadding
4
If true, the image will be cropped to fit within its padding.

android:src
5
This sets a drawable as the content of this ImageView.

Inherited from android.view.View Class −

Sr.No Attribute & Description

1
android:background
This is a drawable to use as the background.

2
android:contentDescription
This defines text that briefly describes content of the view.

3
android:id
This supplies an identifier name for this view

4
android:onClick
This is the name of the method in this View's context to invoke when the view is clicked.

5
android:visibility
This controls the initial visibility of the view.

13 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


Example
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
tools:context=".MainActivity">

<TextView android:text="ImageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30dp"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/imageButton"
android:layout_alignEnd="@+id/imageButton" />

<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:src="@drawable/ic_launcher_foreground"/>

</RelativeLayout>

MainActivity.java
package com.example.textviewexample;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


ImageButton b1;

@Override

14 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1=findViewById(R.id.imageButton);

b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "Image Change",
Toast.LENGTH_SHORT).show();
b1.setImageResource(R.drawable.ic_launcher_background);
}
});
}
}

Output

15 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


Toggle Button
A ToggleButton displays checked/unchecked states as a button. It is basically an on/off button
with a light indicator.

ToggleButton Attributes

Following are the important attributes related to ToggleButton control. You can check Android
official documentation for complete list of attributes and related methods which you can use to
change these attributes are run time.

Sr.No. Attribute & Description

1
android:disabledAlpha
This is the alpha to apply to the indicator when disabled.

2
android:textOff
This is the text for the button when it is not checked.

3
android:textOn
This is the text for the button when it is checked.

Inherited from android.widget.TextView Class −

Sr.No. Attribute & Description

1
android:autoText
If set, specifies that this TextView has a textual input method and automatically corrects some

16 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


common spelling errors.

2
android:drawableBottom
This is the drawable to be drawn below the text.

3
android:drawableRight
This is the drawable to be drawn to the right of the text.

4
android:editable
If set, specifies that this TextView has an input method.

5
android:text
This is the Text to display.

Inherited from android.view.View Class −

Sr.No. Attribute & Description

1
android:background
This is a drawable to use as the background.

2
android:contentDescription
This defines text that briefly describes content of the view.

3
android:id
This supplies an identifier name for this view,

4
android:onClick
This is the name of the method in this View's context to invoke when the view is clicked.

5
android:visibility

17 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


This controls the initial visibility of the view.

Toggle Button Example


Main_activity.xml
1. <?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="150dp"
android:orientation="horizontal">
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tb1"
android:layout_gravity="center_horizontal"
android:checked="false"
android:drawablePadding="20dp"
android:textColor="#000"
/>
<ToggleButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tb2"
android:layout_gravity="center_horizontal"
android:layout_marginLeft="50dp"
android:checked="true"
android:drawablePadding="20dp"
android:textColor="#000"

/>
</LinearLayout>
<Button

18 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/b1"
android:layout_gravity="center"
android:background="#0f0"
android:padding="10dp"
android:text="Submit"
android:textColor="#fff"
android:textSize="20sp"
android:textStyle="bold"
android:layout_marginTop="150dp"
/>
</LinearLayout>

MAinActivity.java File

package com.example.togglebutton;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import android.widget.ToggleButton;

public class MainActivityextends AppCompatActivity {


ToggleButtontbu1,tbu2;
Button bu1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tbu1=findViewById(R.id.tb1);
tbu2=findViewById(R.id.tb2);
bu1=findViewById(R.id.b1);
bu1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String
status="ToggleButton1:"+tbu1.getText()+"\n"+"ToggleButton2:"+tbu2.getText();
Toast.makeText(MainActivity.this,status, Toast.LENGTH_SHORT).show();
}
});
}
}

19 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


20 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani
RadioButton

A RadioGroup class is used for set of radio buttons.


If we check one radio button that belongs to a radio group, it automatically unchecks any
previously checked radio button within the same group.

RadioGroup Attributes

Following are the important attributes related to RadioGroup control. You can check Android
official documentation for complete list of attributes and related methods which you can use to
change these attributes are run time.

Attribute Description

android:checkedButton This is the id of child radio button that should be checked by default within this
radio group.

Inherited from android.view.View Class −

Sr.No. Attribute & Description

1
android:background
This is a drawable to use as the background.

2
android:contentDescription
This defines text that briefly describes content of the view.

3
android:id
This supplies an identifier name for this view

4
android:onClick
This is the name of the method in this View's context to invoke when the view is clicked.

21 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


5
android:visibility
This controls the initial visibility of the view.

Radio Group and Radio Button Example

Activity_main.xml
1. <?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Single Radio Buttons"
android:gravity="center"
android:id="@+id/text1"
android:layout_marginTop="40dp"
android:textSize="20dp"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Radio Button 1"
android:layout_marginTop="70dp"
android:id="@+id/rb1"
/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Radio Button 2"
android:layout_marginTop="20dp"
android:id="@+id/rb2"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/text2"

22 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


android:paddingLeft="50dp"
android:layout_marginTop="20dp"
android:gravity="center"
android:text="Radio button inside RadioGroup"
android:textSize="20dp" />

<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:id="@+id/rg1">

<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Male"
android:layout_marginTop="20dp"
android:id="@+id/rb3"
/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Female"
android:layout_marginTop="20dp"
android:id="@+id/rb4"/>
</RadioGroup>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show selected"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginTop="40dp"
android:textSize="20dp"
android:id="@+id/button1"
/>
</LinearLayout>

.java

package com.example.p12_1;

23 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

public class MainActivityextends AppCompatActivity {


RadioGrouprg1;
RadioButtonrb1,rb2;
Button b1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rg1=findViewById(R.id.rg1);
b1=findViewById(R.id.button1);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
intselectid = rg1.getCheckedRadioButtonId();
rb1= findViewById(selectid);
Toast.makeText(MainActivity.this, rb1.getText(), Toast.LENGTH_SHORT).show();

});
}
}

24 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


25 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani
CheckBox

A CheckBox is an on/off switch that can be toggled by the user. You should use check-boxes
when presenting users with a group of selectable options that are not mutually exclusive.

Inherited from android.widget.TextView Class −

Sr.No Attribute & Description

android:autoText
1
If set, specifies that this TextView has a textual input method and automatically corrects some
common spelling errors.

android:drawableBottom
2
This is the drawable to be drawn below the text.

android:drawableRight
3
This is the drawable to be drawn to the right of the text.

android:editable
4
If set, specifies that this TextView has an input method.

android:text
5
This is the Text to display.

Inherited from android.view.View Class −

Sr.No Attribute & Description

1 android:background
This is a drawable to use as the background.

26 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


android:contentDescription
2
This defines text that briefly describes content of the view.

android:id
3
This supplies an identifier name for this view.

android:onClick
4
This is the name of the method in this View's context to invoke when the view is clicked.

android:visibility
5
This controls the initial visibility of the view.

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<CheckBox
android:id="@+id/cb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pizza"
android:gravity="center"
android:textSize="20sp"
android:layout_marginLeft="150dp"
android:layout_marginTop="150dp"/>

<CheckBox
android:id="@+id/cb2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Burger"
android:gravity="center"
android:layout_marginLeft="150dp"
android:layout_marginTop="50dp"
android:textSize="20sp" />
27 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani
<CheckBox
android:id="@+id/cb3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Coffee"
android:textSize="20sp"
android:gravity="center"
android:layout_marginLeft="150dp"
android:layout_marginTop="50dp" />

<Button
android:id="@+id/b1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:text="Submit"
android:layout_marginTop="70dp"
android:textSize="30sp"
android:textColor="#000000"/>

</LinearLayout>

.java file
package com.example.p11_1;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


CheckBox pizza,burger,coffee;
Button bu1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pizza=findViewById(R.id.cb1);
burger=findViewById(R.id.cb2);
coffee=findViewById(R.id.cb3);
28 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani
bu1=findViewById(R.id.b1);
bu1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
StringBuffer res=new StringBuffer();
int sum=0;
res.append("Selected Item:-"+"\n");
if(pizza.isChecked())
{
res.append("Pizza Rs.100" +"\n");
sum=sum+100;

}
if (burger.isChecked())
{
res.append("Burger Rs.200"+"\n");
sum=sum+200;

}
if (coffee.isChecked())
{
res.append("Coffee Rs.300"+"\n");
sum=sum+300;

}
res.append("Total amount"+"\n"+sum+"Rs");
Toast.makeText(MainActivity.this, res.toString(), Toast.LENGTH_LONG).show();
}
});

}
}

Output

29 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


ProgressBar
Progress bars are used to show progress of a task. For example, when you are uploading or
downloading something from the internet, it is better to show the progress of download/upload to
the user.
Attributes of Progress Bar

Sr. No Title & description

1
getMax()
This method returns the maximum value of the progress.

2
incrementProgressBy(int diff)
This method increments the progress bar by the difference of value passed as a parameter.

3
setIndeterminate(boolean indeterminate)
This method sets the progress indicator as determinate or indeterminate.

4
setMax(int max)
This method sets the maximum value of the progress dialog.

5
setProgress(int value)
This method is used to update the progress dialog with some specific value.

6
show(Context context, CharSequence title, CharSequence message)
This is a static method, used to display progress dialog.

Example
Xml file

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


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"

30 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


tools:context=".MainActivity">

<ProgressBar
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/p1"/>

</LinearLayout>

Java file
package com.example.cuastomtoast;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ProgressBar;

public class MainActivity extends AppCompatActivity {


ProgressBar myprogressbar;
int myprogress=0;
Thread mythread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myprogressbar=(ProgressBar)findViewById(R.id.p1);
mythread=new Thread();
mythread.start();
}
public void run()
{
while (myprogress<100)
{
try{
myprogress++;
myprogressbar.setProgress(myprogress);
Thread.sleep(100);
}
catch (Exception e)
{

}}
}}

Output

31 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


List View
Android ListView is a view which groups several items and display them in vertical scrollable
list. The list items are automatically inserted to the list using an Adapter that pulls content from
a source such as an array or database.

ListView Attributes

Following are the important attributes specific to GridView −

Sr.No Attribute & Description

1
android:id
This is the ID which uniquely identifies the layout.

2
android:divider
This is drawable or color to draw between list items.

3
android:dividerHeight
This specifies height of the divider. This could be in px, dp, sp, in, or mm.

4
android:entries
Specifies the reference to an array resource that will populate the ListView.

5
android:footerDividersEnabled

32 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


When set to false, the ListView will not draw the divider before each footer view. The default value
is true.

6
android:headerDividersEnabled
When set to false, the ListView will not draw the divider after each header view. The default value
is true.

Program
<LinearLayout 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:orientation="vertical"
tools:context=".ListActivity" >

<ListView
android:id="@+id/mobile_list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>

</LinearLayout>

package com.example.ListDisplay;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ListDisplay extends AppCompatActivity


{
// Array of strings...
String[] mobileArray = {"Android","IPhone","WindowsMobile","Blackberry",
"WebOS","Ubuntu","Windows7","Max OS X"};

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

33 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


ArrayAdapter adapter = new ArrayAdapter<String>(this,
R.layout.activity_listview, mobileArray);

ListView listView = (ListView) findViewById(R.id.mobile_list);


listView.setAdapter(adapter);
}
}

Grid View
34 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani
Android GridView shows items in two-dimensional scrolling grid (rows & columns) and the
grid items are not necessarily predetermined but they automatically inserted to the layout using
a ListAdapter

GridView Attributes

Following are the important attributes specific to GridView −

Sr.No Attribute & Description

1 android:id
This is the ID which uniquely identifies the layout.

android:columnWidth
2
This specifies the fixed width for each column. This could be in px, dp, sp, in, or mm.

android:gravity
3 Specifies the gravity within each cell. Possible values are top, bottom, left, right, center,
center_vertical, center_horizontal etc.

android:horizontalSpacing
4
Defines the default horizontal spacing between columns. This could be in px, dp, sp, in, or mm.

android:numColumns
5 Defines how many columns to show. May be an integer value, such as "100" or auto_fit which
means display as many columns as possible to fill the available space.

android:stretchMode
Defines how columns should stretch to fill the available empty space, if any. This must be either of
the values −

6  none − Stretching is disabled.


 spacingWidth − The spacing between each column is stretched.
 columnWidth − Each column is stretched equally.
 spacingWidthUniform − The spacing between each column is uniformly stretched..

35 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


android:verticalSpacing
7
Defines the default vertical spacing between rows. This could be in px, dp, sp, in, or mm.

Exapmle:
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/grid_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="auto_fit"
android:columnWidth="90dp"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp"
android:gravity="center"
android:stretchMode="columnWidth" >
</GridView>

MainActivity.java File

package com.example.gridview;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.GridView;

public class MainActivity extends AppCompatActivity {

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

GridView gridview=(GridView)findViewById(R.id.grid_view);
gridview.setAdapter(new ImageAdapter(this));
}
}

ImageAdapter.java File
package com.example.gridview;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridLayout;
import android.widget.GridView;
import android.widget.ImageView;

public class ImageAdapter extends BaseAdapter


{

36 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


public Context mcontext;

public ImageAdapter(Context c)
{
mcontext=c;
}
@Override
public int getCount() {
return array.length;
}

@Override
public Object getItem(int i) {
return null;
}

@Override
public long getItemId(int i) {
return 0;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {

ImageView image;
if(view==null)
{
image=new ImageView(mcontext);
image.setLayoutParams(new GridView.LayoutParams(70,70));
image.setScaleType(ImageView.ScaleType.CENTER);
image.setPadding(8,8,8,8);
}
else
{
image=(ImageView) view;
}
image.setImageResource(array[i]);
return image;
}

Integer[]
array={R.drawable.ic_launcher_background,R.drawable.ic_launcher_foreground};

ImageView

37 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


Android allows you to manipulate images by adding different kinds of effects on the images.
You can easily apply image processing techniques to add certain kinds of effects on images.
The effects could be brightness,darkness, grayscale conversion e.t.c.
Android provides Bitmap class to handle images. This can be found under
android.graphics.bitmap. There are many ways through which you can instantiate bitmap. We
are creating a bitmap of image from the imageView.

Sr.No Method & description

1
copy(Bitmap.Config config, boolean isMutable)
This method copy this bitmap's pixels into the new bitmap

2
createBitmap(DisplayMetrics display, int width, int height, Bitmap.Config config)
Returns a mutable bitmap with the specified width and height

3
createBitmap(int width, int height, Bitmap.Config config)
Returns a mutable bitmap with the specified width and height

4
createBitmap(Bitmap src)
Returns an immutable bitmap from the source bitmap

5
extractAlpha()
Returns a new bitmap that captures the alpha values of the original

6
getConfig()
This mehtod eturn that config, otherwise return null

7
getDensity()
Returns the density for this bitmap

8
getRowBytes()
Return the number of bytes between rows in the bitmap's pixels

38 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


9
setPixel(int x, int y, int color)
Write the specified Color into the bitmap (assuming it is mutable) at the x,y coordinate

10
setDensity(int density)
This method specifies the density for this bitmap

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

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:id="@+id/image1"
android:layout_width="fill_parent"
android:layout_height="200dp"
android:scaleType="fitXY"
android:src="@drawable/ic_launcher_foreground" />

<ImageView
android:id="@+id/image2"
android:layout_width="fill_parent"
android:layout_height="200dp"
android:layout_below="@+id/image1"
android:layout_marginTop="10dp"
android:scaleType="fitXY"
android:src="@mipmap/ic_launcher" />

<ImageView
android:id="@+id/image3"
android:layout_width="fill_parent"
android:layout_height="200dp"
android:layout_below="@+id/image2"
android:layout_marginTop="10dp"
android:scaleType="fitXY"
android:src="@mipmap/ic_launcher" />
<ImageView
android:id="@+id/image4"
android:layout_width="fill_parent"
android:layout_height="200dp"
android:layout_below="@+id/image3"
android:layout_marginTop="10dp"
android:scaleType="fitXY"
android:src="@mipmap/ic_launcher" />
<ImageView
android:id="@+id/image5"
android:layout_width="fill_parent"

39 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


android:layout_height="200dp"
android:layout_below="@+id/image4"
android:layout_marginTop="10dp"
android:scaleType="fitXY"
android:src="@mipmap/ic_launcher" />
</RelativeLayout>
</ScrollView>

Java File
package com.example.imageviewexamle;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

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

ImageView i1, i2;


i1 = findViewById(R.id.image1);
i2 = findViewById(R.id.image2);
i1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "IMage1 Clicked",
Toast.LENGTH_SHORT).show();
}
});

i2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "IMage1 Clicked",
Toast.LENGTH_SHORT).show();
}
});

}
}

ScrollView

40 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


The android.widget.ScrollView class provides the functionality of scroll view. ScrollView is
used to scroll the child elements of palette inside ScrollView. Android supports vertical scroll
view as default scroll view. Vertical ScrollView scrolls elements vertically.

Android uses HorizontalScrollView for horizontal ScrollView.

Scroll View

Xml file

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


<ScrollView android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/s1"
xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#CCEEFF"
tools:context=".MainActivity">

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b1"
android:text="Gayatri"/>

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b2"
android:text="Iqra"
android:layout_below="@id/b1"/>

<Button
android:id="@+id/b3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/b2"
android:text="Alfiya" />

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
41 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani
android:id="@+id/b4"
android:text="Aqsa"
android:layout_below="@id/b3"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b5"
android:text="Ishita"
android:layout_below="@id/b4"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b6"
android:text="Madhu"
android:layout_below="@id/b5"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b7"
android:text="Riya"
android:layout_below="@id/b6"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b8"
android:text="Pratiksha"
android:layout_below="@id/b7"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b9"
android:text="Krutika"
android:layout_below="@id/b8"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b10"
android:text="Kanchan"
android:layout_below="@id/b9"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b11"
android:text="Tejal"
android:layout_below="@id/b10"/>
<Button

42 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b12"
android:text="Aditi"
android:layout_below="@id/b11"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b13"
android:text="Saher"
android:layout_below="@id/b12"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b14"
android:text="Arshin"
android:layout_below="@id/b13"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b15"
android:text="Saba"
android:layout_below="@id/b14"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b16"
android:text="Zoya"
android:layout_below="@id/b15"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/b17"
android:text="Akku"
android:layout_below="@id/b16"/>

</RelativeLayout>
</ScrollView>
Output

43 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


44 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani
Custom Toast Alert
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show Toast"
android:id="@+id/showtoast"
/>

</LinearLayout>

Java file

package com.example.gridviewexample;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=findViewById(R.id.showtoast);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LayoutInflater li=getLayoutInflater();
View
layout=li.inflate(R.layout.custom_toast,(ViewGroup)findViewById(R.id.custom_toast));
45 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani
Toast toast=new Toast(getApplicationContext());
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
}
});
}
}

output

46 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


Time and Date Picker

Date Picker:
Android Date Picker allows you to select the date consisting of day, month and year in your
custom user interface. For this functionality android provides DatePicker and DatePickerDialog
components.

. You can use the following methods of the DatePicker to perform further operation.

Sr.No Method & description

1
getDayOfMonth()
This method gets the selected day of month

2
getMonth()
This method gets the selected month

3
getYear()
This method gets the selected year

4
setMaxDate(long maxDate)
This method sets the maximal date supported by this DatePicker in milliseconds since January 1,
1970 00:00:00 in getDefault() time zone

5
setMinDate(long minDate)
This method sets the minimal date supported by this NumberPicker in milliseconds since January 1,
1970 00:00:00 in getDefault() time zone

6
setSpinnersShown(boolean shown)
This method sets whether the spinners are shown

47 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


7
updateDate(int year, int month, int dayOfMonth)
This method updates the current date

8
getCalendarView()
This method returns calendar view

9
getFirstDayOfWeek()
This Method returns first day of the week

Date Picker:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<DatePicker
android:id="@+id/dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:datePickerMode="calendar"/>

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

</LinearLayout>

package com.example.datetimepicker;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


DatePicker dp1;
Button b12;

48 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dp1=findViewById(R.id.dp);
b12=findViewById(R.id.b1);
b12.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

String day = "Day"+dp1.getDayOfMonth();


String month="month"+(dp1.getMonth()+1);
String year="year"+dp1.getYear();
Toast.makeText(MainActivity.this, day +"\n"+month+"\n"+year ,
Toast.LENGTH_SHORT).show();

}
});

}
}

49 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


TimePicker
Android Time Picker allows you to select the time of day in either 24 hour or AM/PM mode.
The time consists of hours, minutes and clock format. Android provides this functionality
through TimePicker class.
In order to use TimePicker class, you have to first define the TimePicker component in your
activity.xml. It is define as below −
<TimePicker
android:id="@+id/timePicker1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

there are other methods in the API that gives more control over TimePicker Component. They
are listed below.

Sr.No Method & description

1
is24HourView()
This method returns true if this is in 24 hour view else false

2
isEnabled()
This method returns the enabled status for this view

3
setCurrentHour(Integer currentHour)
This method sets the current hour

4
setCurrentMinute(Integer currentMinute)
This method sets the current minute

5
setEnabled(boolean enabled)
This method set the enabled state of this view

6
setIs24HourView(Boolean is24HourView)
This method set whether in 24 hour or AM/PM mode

50 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani


7
setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener)
This method Set the callback that indicates the time has been adjusted by the user

51 Unit No:04:Mobile Application Development Notes| P.S.Gaidhani

You might also like