42
Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Programming with Android: Layouts

Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Programming with Android: Introduction

Luca BedogniDipartimento di Informatica: Scienza e Ingegneria

Università di Bologna

Programming with Android: Layouts

Page 2: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts 2

Views: outline

v Main difference between a Drawable and a View is reaction to events

v Could be declared in an XML filev Could also be declared inside an Activityv Every view has a unique IDv Use findViewById(int id) to get itv Views can be customized

Page 3: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

Some useful methods

v getLeft()v getTop()v getMeasuredWidth()v getMeasuredHeight()v getWidth()v getHeight()v requestLayout()v invalidate()

3

Page 4: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

ViewGroup and layout

v ViewGroup is a view containerv It is responsible for placing other views on the

displayv Every layout must extend a ViewGroupv Every view needs to specify:

v android:layout_heightv android:layout_widthv A dimension or one of match_parent or wrap_content

4

Page 5: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

Layouts

v Some layouts are pre-defined by Androidv Some of these are

v LinearLayoutv RelativeLayoutv TableLayoutv FrameLayoutv AbsoluteLayout

v A layout could be declared inside another layout

5

Page 6: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

LinearLayout

l Dispose views on a single row or column, depending on android:layout_orientation

l The orientation could also be declared via setOrientation(int orientation)l orientation is one of HORIZONTAL or VERTICAL

l Has two other attributes:l gravityl weight

6

Page 7: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

LinearLayout

<?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" > <!-- Also horizontal -->

<Button

android:id="@+id/button1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/buttonString1" />

<Button

android:id="@+id/button2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/buttonString2" />

</LinearLayout>

7

Page 8: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

LinearLayout

8

Page 9: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

LinearLayout

<?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" >

<Button

android:id="@+id/button1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="@string/buttonString1" />

<Button

android:id="@+id/button2"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:text="@string/buttonString2" />

</LinearLayout>

9

Page 10: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

LinearLayout

10

Page 11: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

LinearLayout weight

<?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="horizontal" >

<Button

android:id="@+id/button1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="@string/buttonString1"

android:layout_weight="1" />

<Button

android:id="@+id/button2"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="@string/buttonString2"

android:layout_weight="2" />

</LinearLayout>

11

Page 12: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

LinearLayout weight

12

Page 13: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

LinearLayout gravity

<?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="horizontal" >

<Button

android:id="@+id/button1"

android:layout_width="match_parent" android:layout_height="wrap_content"

android:text="@string/buttonString1"

android:layout_weight="1" />

<Button

android:id="@+id/button2"

android:layout_width="match_parent" android:layout_height="wrap_content"

android:text="@string/buttonString2"

android:layout_weight="2"

android:layout_gravity="center_vertical"

android:gravity="top|center" />

</LinearLayout>

13

Page 14: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

LinearLayout gravity

14

Page 15: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

LinearLayout problem

15

Page 16: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

RelativeLayout

v Disposes views according to the container or according to other views

v The gravity attribute indicates what views are more important to define the layout

v Useful to align views

16

Page 17: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

RelativeLayout

17

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

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

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

<EditText

android:id="@+id/username" android:text="username"

android:inputType="text"

android:layout_width="wrap_content" android:layout_height="wrap_content"

android:layout_alignParentRight="true"

android:layout_toRightOf="@+id/usernameLabel" >

</EditText>

<TextView

android:id="@+id/usernameLabel"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBaseline="@+id/username"

android:text="Username" />

Page 18: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

RelativeLayout

18

<EditText

android:id="@+id/password" android:text="password"

android:inputType="textPassword"

android:layout_below="@+id/username"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignLeft="@+id/username"

android:layout_alignParentRight="true"

android:layout_toRightOf="@+id/usernameLabel" >

</EditText>

<TextView

android:id="@+id/passwordLabel"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignBaseline="@+id/password"

android:text="Password" />

</RelativeLayout>

Page 19: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

RelativeLayout

19

Page 20: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

TableLayout

v As the name say, similar to a Tablev Has some attributes to customize the layout:

v android:layout_columnv android:layout_spanv android:stretchColumnsv android:shrinkColumnsv android:collapseColumns

v Each row is inside a <TableRow> element

20

Page 21: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

TableLayout

21

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

<TableLayout android:layout_width="fill_parent"

android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tableLayout">

<TableRow android:layout_width="wrap_content" android:layout_height="wrap_content“ android:id="@+id/firstRow">

<Button android:id="@+id/button1“

android:layout_width="wrap_content“

android:layout_height="wrap_content“

android:text="Button" />

<Button android:id="@+id/button2“

android:layout_width="match_parent"

android:layout_height="match_parent"

android:text="Button" />

<Button android:id="@+id/button3"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:text="Button" />

</TableRow>

Page 22: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

TableLayout

22

<TableRow

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/secondRow">

<Button android:layout_column="1"

android:layout_span="2"

android:id="@+id/button4"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Button">

</Button>

</TableRow>

</TableLayout>

Page 23: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

TableLayout

23

Page 24: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

FrameLayout and AbsoluteLayout

v FrameLayoutv Adds an attribute, android:visibilityv Makes the user able to define layouts managing the

visibility of viewsv AbsoluteLayout

v Deprecatedv Specify position with x and yv Pay attention to different resolutions

24

Page 25: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

ConstraintLayout

v Flat view hierarchyv Similar to RelativeLayoutv > Android 2.3v Overarching idea: define constraints

(top/bottom/left/right) for each viewv Each constraint has to be defined to another view,

another layout or an invisible guideline

25

Page 26: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

ConstraintLayout: example

26

v Both layouts are finev The left one has no top constraint on C, which will then

be placed at the top

Page 27: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

ConstraintLayout: how to use

27

v Add directions to build.gradle

v Sync the project

repositories {maven {

url 'https://maven.google.com'}

}

dependencies {compile 'com.android.support.constraint:constraint-layout:1.0.2'

}

Page 28: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

ConstraintLayout: how to create one

28

v Converting a Layoutv Just right click on the layout and select the

conversion optionv Creating a ConstraintLayout

v Create a new layoutv As root-tag, put android.support.constraint.ConstraintLayout

Page 29: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

ConstraintLayout: how to create one

29

v In the layout editor you’ll see on the right the constraints, and on the left a preview

v Layouts are drawn according to the available space

Page 30: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

ConstraintLayout: constraints

30

v Each view needs at least one constraint per planev Constraints can be defined only between anchor

points sharing the same planev Each handle can define one constraintsv Multiple handles can define a constraint to a single

anchor pointv Adding 2 opposite constraints places the view in

the middles

Page 31: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

ConstraintLayout: constraints examples

31

Page 32: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

ConstraintLayout: constraints examples

32

Page 33: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

CardView

• A CardView is a ViewGroup• It contains views• Need to add

• Useful to group content related to the same entity

33

dependencies {implementation 'com.android.support:cardview-v7:27.1.0'

}

Page 34: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

Adapters

v Used to visualize dynamic datav Make a ViewGroup to interact with datav Some methods:

v isEmpty()v getItem(int position)v getCount()v getView()

34

Page 35: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

AdapterView

v A ViewGroup subclassv Its subchilds are determined by an Adapterv Some subclasses:

v ListViewv GridViewv Spinnerv Gallery

35

Page 36: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

ListView example

36

public class HelloAndroidActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.list);

String[] data = {"First", "Second", "Third"};

ListView lv = (ListView)findViewById(R.id.list);

lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data));

}

}

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

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

android:layout_width="match_parent" android:layout_height="match_parent"

android:orientation="vertical"

android:id="@+id/list" />

Page 37: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

ListView

37

Page 38: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

Other views/adapters

v Spinner, selection of multiple itemsv Gallery, imagesv ExpandableListView, list with hidden valuesv TabWidget, tabbed layouts

38

Page 39: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

RecyclerView

• ListView available since API version 1• Since Lollipop, RecyclerView has been introduced

• Better handling of events• Separates data and layout

• Start with

• Then add a RecyclerView to the Layout

39

dependencies {implementation 'com.android.support:recyclerview-v7:27.0.0'

}

Page 40: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

Step 1: LayoutManager

• For each RecyclerView, we have to define a LayoutManager• “A LayoutManager measues and positions item views on

the RecyclerView. It also handles view view focus and visibility”

• In simple words, it is responsible for placing items in the layout

• Examples: LinearLayoutManager, GridLayoutManager, StaggeredGridLayoutManager, WearableLinearLayoutManager

40

Page 41: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

Step 2: Adapter

• Create a class which extends RecyclerView.Adapter• Override some methods:

• getItemCount()• onCreateViewHolder()

• Creates a new ViewHolder item• onBindViewHolder()

• Bind the appropriate data to the ViewHolder

41

Page 42: Luca Bedogni · Programming with Android: Introduction Luca Bedogni Dipartimento di Informatica: Scienza e Ingegneria Università di Bologna Layouts. Luca Bedogni -Programming with

Luca Bedogni - Programming with Android – Layouts

Differences: ListView and RecyclerView

• More efficient• LayoutManager flexbility: think about LinearLayout

and GridLayout• Possible to add custom Decorations• Animations made easy• More than just notifyDataSetChanged()

• notifyItemInserted(), notifyItemRemoved(), notifyItemChanged() and more

42