Relative Layout and Just Maths Screen Layouts
In the previous post, we looked at Linear Layout. There is another layout which is extremely helpful and flexible in designing good looking apps i.e. Relative Layout. This layout arranges your views relative to its parent or other child views. You can say something like - align this TextView to the left of EditText or align this Button below EditText.
To position views inside Relative Layout, child views have to specify layout attributes which align them inside relative layout. If you do not specify any layout attributes for child views, all the child views will be aligned at the top-left corner of the relative layout.
Attributes to define position
As discussed above, you can align views relative to parent or any other child view. Below attributes are used to align the edge of the view to the parent's edge. For example: android:layout_alignParentTop means align the top edge of the child view with the top edge of the parent and same goes for other attributes. For these acceptable value is either true or false.
- android:layout_alignParentTop
- android:layout_alignParentRight
- android:layout_alignParentBottom
- android:layout_alignParentLeft
Below attributes are self explanatory. They allow us to center the child view in the parent. android:layout_centerInParent means center horizontally and vertically inside parent layout. For these acceptable value is either true or false.
- android:layout_centerInParent
- android:layout_centerHorizontal
- android:layout_centerVertical
Below attributes are used to align the edge of the view to the child's edge. For these attributes acceptable value is the id of the view to which you want to anchor your view. For example: android:layout_alignTop = "@id/btn_send" means view's top edge should align to the btn_send top edge. In simple words, top edge of the view must be same as the top edge of the btn_send.
- android:layout_alignTop
- android:layout_alignRight
- android:layout_alignBottom
- android:layout_alignLeft
Below attributes are used to say something like - below this view, above this view, to the right of this view and to the left of the view. For these acceptable value is the id of the view to which you want to anchor to.
- android:layout_above
- android:layout_below
- android:layout_toLeftOf
- android:layout_toRightOf
These are again self explanatory. If you say something like - android:layout_below = "@id/btn_send" then it means align the top edge of your view to the bottom edge of btn_send. It is simple as put your view below btn_send. Same goes for other attributes.
Oh God !! So many attributes. Once you start using them, you will get familiar with them and Android Studio Design View (Drag and Drop Controls) helps a lot in placing your controls where you want them.
Enough theory. Let's put this knowledge into practice with our Just Maths App Screen Layouts. Below you can find the source code for this. We will design the layout for our game screen as it has both layouts - Relative Layout and Linear Layout. Other screens are easy to design (Refer source code).
Filename - activity_game.xml
<?xml version="1.0" encoding="utf-8"?> <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:background="#DFDED4" tools:context="cheezycode.com.justmaths.GameActivity"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true"> <ImageButton android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/btnCorrect" android:layout_weight="1" android:background="#CA171B" android:src="@drawable/ic_check_white_36dp" android:paddingTop="25dp" android:layout_marginRight="1dp" android:paddingBottom="25dp"/> <ImageButton android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/btnIncorrect" android:layout_weight="1" android:background="#CA171B" android:src="@drawable/ic_close_white_36dp" android:layout_marginLeft="1dp" android:paddingTop="25dp" android:paddingBottom="25dp"/> </LinearLayout> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:padding="20dp" android:id="@+id/topContainer" android:layout_alignParentLeft="true" android:layout_alignParentRight="true"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="TIME : 05" android:id="@+id/txtTime" android:layout_weight="1" android:gravity="left" android:textColor="#CA171B" android:textSize="25sp"/> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:text="SCORE: 00" android:id="@+id/txtScore" android:layout_weight="1" android:gravity="right" android:textColor="#CA171B" android:textSize="25sp" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="11+64" android:id="@+id/txtViewQuestion" android:layout_below="@id/topContainer" android:layout_centerHorizontal="true" android:textSize="70sp" android:layout_marginTop="100dp" android:textIsSelectable="true" android:textColor="#432F21" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="=75" android:id="@+id/txtViewResult" android:layout_centerHorizontal="true" android:layout_below="@id/txtViewQuestion" android:textSize="70sp" android:textIsSelectable="true" android:textColor="#432F21" /> </RelativeLayout>
Above layout will have display like this
Icons used in this project can be found at this URL - https://design.google.com/icons/. Just download, extract and paste them in resources folder (res). You can use Font Awesome as well, if you do not want to use image files. You can find the post related to it at Font Awesome. Let us know if you have any concerns. Happy Reading
Source Code
bhai mere paise kamma yrr aur adss dal.....you are doing a very good job .thankss
ReplyDeleteveryy good job keep it up
ReplyDeleteAaa-maazingg! thanksmuch :)
ReplyDeleteBhai hamare bhi messge ka reply de
ReplyDeleteVery good job Sir. .
ReplyDelete