FILE MainActivity.java CODE TO STORE THE BUTTON MENU AND MOVE THE PAGE

APPENDIX FILE MainActivity.java

  package com.ste.sembakoapp; import Android.content.Intent; import Android.support.v7.app.AppCompatActivity; import Android.os.Bundle; import Android.view.View; import Android.widget.Button; public class MainActivity extends AppCompatActivity { private Button btn1 , btn2 , btn3 ;

  @Override

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

  btn1 = (Button) findViewById(R.id. menu1 ); btn2 = (Button) findViewById(R.id. menu2 ); btn3 = (Button) findViewById(R.id. menu3 ); btn1 .setOnClickListener( new View.OnClickListener() { @Override

  public void onClick(View v) { startActivity( new Intent(MainActivity. this , display. class )); } });

  btn2 .setOnClickListener( new View.OnClickListener() { @Override

  public void onClick(View v) { startActivity( new Intent(MainActivity. this , DetailActivity. class )); } });

  btn3 .setOnClickListener( new View.OnClickListener() { @Override

  public void onClick(View v) { startActivity( new Intent(MainActivity. this , AboutActivity. class )); } }); } }

  FILE Display.java

CODE TO TAKE DATA ON MINISTRY OF TRADE WEBSITE AND

DISPLAY ALL PRICES

  package com.ste.sembakoapp; import Android.support.v7.app.AppCompatActivity; import Android.os.Bundle; import Android.view.View; import Android.widget.ArrayAdapter; import Android.widget.Button; import Android.widget.Spinner; import Android.widget.TextView; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; public class display extends AppCompatActivity { private Button getBtn ; private TextView result ; private Spinner spinner , spinner2 ;

  @Override

  protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout. activity_display );

  result = (TextView) findViewById(R.id. result ); getBtn = (Button) findViewById(R.id. getBtn ); spinner = (Spinner) findViewById(R.id. tahun_spinner );

   ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this , R.array. tahun_array , Android.R.layout. simple_spinner_item ); adapter.setDropDownViewResource(Android.R.layout. simple_spinner_d

  ropdown_item ); spinner .setAdapter(adapter); spinner2 = (Spinner) findViewById(R.id. bulan_spinner );

   ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource( this , R.array. bulan_array , Android.R.layout. simple_spinner_item ); adapter2.setDropDownViewResource(Android.R.layout. simple_spinner_

  dropdown_item ); spinner2 .setAdapter(adapter2); getBtn .setOnClickListener( new View.OnClickListener() { @Override

  public void onClick(View v) { final StringBuilder url = new StringBuilder(); final StringBuilder period = new StringBuilder(); String tahun = spinner .getSelectedItem().toString();

  int bulan_pos = spinner2 .getSelectedItemPosition(); String bulan = String.valueOf(bulan_pos+

  1 );

  String str_bulan = spinner2 .getSelectedItem().toString(); String URL = url.append( "http://www.kemendag.go.id/id/economic-

  profile/prices/national-price-table?

year=" ).append(tahun).append( "&month=" ).append(bulan).toString();

   String periode = period.append(str_bulan).append( "-" ).append(tahun).toString(); getWebsite(URL,periode); } }); } private void getWebsite( final String URL, final String periode){ new Thread( new Runnable() {

  @Override

  public void run() { final StringBuilder builder = new StringBuilder(); try { Document doc = Jsoup.connect( URL ).get(); Element table = doc.select( "table" ).get( ); Elements rows = table.select( "tr" ); Element row_tanggal = rows.get(

  1 );

   Elements tgl = row_tanggal.select( "th" ); int [] tanggal = new int [tgl.size()]; for ( int j= ; j<tgl.size(); j++){ String getTgl=tgl.get(j).text(); tanggal[j]=Integer.parseInt(getTgl); } builder.append( " \n " ); LinkedListImpl listData = new LinkedListImpl(); for ( int i=

  2 ; i<rows.size(); i++){

   Element row = rows.get(i); Elements cols = row.select( "td" ); String nama = cols.get(

  1 ).text();

  int numOfHarga= cols.size()-

  3 ;

  float [] arrHarga = new float [numOfHarga]; int idx= ; for ( int k=

  3 ; k<cols.size(); k++){

   String harga = cols.get(k).text(); String harga_rep = harga.replaceAll( "[^a-zA-Z0-9]" , "" ); float c = ; if (!harga_rep.equals( "" )){ c = Float.parseFloat(harga_rep); } else { c = ; } arrHarga[idx]=c; idx++;

   } node node = new node(nama, arrHarga, tanggal); listData.addLast(node); } Statistic stat = new Statistic(); node pointer = listData.getHead(); while (pointer != null ) { builder.append( "Name :

  " ).append(pointer.getNama()).append( " \n " );

   builder.append( "Period :

  " ).append( periode ).append( " \n " );

   builder.append( "Prices" ).append( " \n " ); float [] h = pointer.getHarga(); int [] t = pointer.getTanggal(); for ( int a= ; a<h. length ; a++){ builder.append( "Date :

  " ).append(t[a]);

  if (t[a] <

  10 ){

   builder.append( " | " ); } else { builder.append( " | " ); } builder.append( "Price :

  " ).append(h[a]).append( " \n " );

   } builder.append( " \n " ); builder.append( "Statistics" ).append( " \n " ); float meanVal = stat.mean(h); double medVal = stat.median(h); float modeVal = stat.mode(h); builder.append( "Mean =

  " ).append(meanVal).append( " \n " );

   builder.append( "Median =

  " ).append(medVal).append( " \n " );

   builder.append( "Mode =

  " ).append(modeVal).append( " \n " );

   pointer = pointer.getNext(); builder.append( " \n " ).append( " \n " ); } } catch (IOException e) { builder.append( "Error :" ).append(e.getMessage()).append( " \n " ); } runOnUiThread( new Runnable() {

  @Override

  public void run() {

  result .setText( builder .toString());

   } }); } }).start(); } }

  FILE DetailActivity.java

CODE TO DISPLAY THE DATA BASIC COMMODITIES ACCORDANCE

WITH ITEMS SELECTED AND DISPLAY THE GRAPH OF

STATISTICAL CALCULATIONS

  package com.ste.sembakoapp; import Android.graphics.Color; import Android.os.Bundle; import Android.support.v7.app.AppCompatActivity; import Android.view.View; import Android.widget.ArrayAdapter; import Android.widget.Button; import Android.widget.Spinner; import Android.widget.TextView; import Android.widget.Toast; import com.jjoe64.graphview.GraphView; import com.jjoe64.graphview.GridLabelRenderer; import com.jjoe64.graphview.LegendRenderer; import com.jjoe64.graphview.series.DataPoint; import com.jjoe64.graphview.series.DataPointInterface; import com.jjoe64.graphview.series.LineGraphSeries; import com.jjoe64.graphview.series.OnDataPointTapListener; import com.jjoe64.graphview.series.Series; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; import java.util.Random; public class DetailActivity extends AppCompatActivity { private Button getBtn ; private TextView result ; private Spinner spinner , spinner2 , spinner3 ; private LineGraphSeries<DataPoint> mSeries1 ;

  @Override

  protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout. activity_detail );

  result = (TextView) findViewById(R.id. result ); getBtn = (Button) findViewById(R.id. getBtn );

  spinner = (Spinner) findViewById(R.id. tahun_spinner );

   ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this , R.array. tahun_array , Android.R.layout. simple_spinner_item ); adapter.setDropDownViewResource(Android.R.layout. simple_spinner_d

  ropdown_item ); spinner .setAdapter(adapter); spinner2 = (Spinner) findViewById(R.id. bulan_spinner );

   ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource( this , R.array. bulan_array , Android.R.layout. simple_spinner_item ); adapter2.setDropDownViewResource(Android.R.layout. simple_spinner_

  dropdown_item ); spinner2 .setAdapter(adapter2); spinner3 = (Spinner) findViewById(R.id. item_spinner );

   ArrayAdapter<CharSequence> adapter3 = ArrayAdapter.createFromResource( this , R.array. item_array , Android.R.layout. simple_spinner_dropdown_item ); adapter3.setDropDownViewResource(Android.R.layout. simple_spinner_

  dropdown_item ); spinner3 .setAdapter(adapter3); getBtn .setOnClickListener( new View.OnClickListener() { @Override

  public void onClick(View v) { final StringBuilder url = new StringBuilder(); final StringBuilder period = new StringBuilder(); String tahun =

  spinner .getSelectedItem().toString();

  int bulan_pos =

  spinner2 .getSelectedItemPosition();

  int item_pos = spinner3 .getSelectedItemPosition(); String item_name =

  spinner3 .getSelectedItem().toString();

   String bulan = String.valueOf(bulan_pos+

  1 );

   String str_bulan =

  spinner2 .getSelectedItem().toString();

   String URL = url.append( "http://www.kemendag.go.id/id/economic-

  profile/prices/national-price-table?

year=" ).append(tahun).append( "&month=" ).append(bulan).toString();

   String periode = period.append(str_bulan).append( "-" ).append(tahun).toString(); getWebsite(URL,periode,item_pos, item_name); } });

   } private void getWebsite( final String URL, final String periode, final int item_position, final String item_name){ new Thread( new Runnable() {

  @Override

  public void run() { final StringBuilder builder = new StringBuilder(); try { Document doc = Jsoup.connect( URL ).get(); Element table = doc.select( "table" ).get( ); Elements rows = table.select( "tr" ); Element row_tanggal = rows.get(

  1 );

   Elements tgl = row_tanggal.select( "th" ); int [] tanggal = new int [tgl.size()]; for ( int j= ; j<tgl.size(); j++){ String getTgl=tgl.get(j).text(); tanggal[j]=Integer.parseInt(getTgl); } LinkedListImpl listData = new LinkedListImpl(); for ( int i=

  2 ; i<rows.size(); i++){

   Element row = rows.get(i); Elements cols = row.select( "td" ); String nama = cols.get(

  1 ).text();

  int numOfHarga= cols.size()-

  3 ;

  float [] arrHarga = new float [numOfHarga]; int idx= ; for ( int k=

  3 ; k<cols.size(); k++){

   String harga = cols.get(k).text(); String harga_rep = harga.replaceAll( "[^a-zA-Z0-9]" , "" ); float c = ; if (!harga_rep.equals( "" )){ c = Float.parseFloat(harga_rep); } else { c = ; } arrHarga[idx]=c; idx++; } node node = new node(nama, arrHarga, tanggal); listData.addLast(node); } Statistic stat = new Statistic(); node pointer = listData.get( item_position ); builder.append( "Name :

  " ).append( item_name ).append( " \n " );

   builder.append( "Period :

  " ).append( periode ).append( " \n " );

   builder.append( "Prices" ).append( " \n " ); float [] h = pointer.getHarga(); int [] t = pointer.getTanggal(); DataPoint[] values = new DataPoint[h. length ]; for ( int a= ; a<h. length ; a++){ int x = t[a]; float y = h[a]; DataPoint v = new DataPoint(x, y); values[a] = v; builder.append( "Date : " ).append(t[a]); if (t[a] <

  10 ){

   builder.append( " | " ); } else { builder.append( " | " ); } builder.append( "Price :

  " ).append(h[a]).append( " \n " );

   } Random rand = new Random(); int r = rand.nextInt( 255 ); int g = rand.nextInt( 255 ); int b = rand.nextInt( 255 ); int randomColor = Color.rgb(r,g,b);

  mSeries1 = new LineGraphSeries<>(values); mSeries1 .setTitle( item_name ); mSeries1 .setColor(randomColor); mSeries1 .setOnDataPointTapListener( new

  OnDataPointTapListener() {

  @Override

  public void onTap(Series series, DataPointInterface dataPoint) { Toast.makeText(DetailActivity. this ,

  "Price : " +dataPoint, Toast. LENGTH_SHORT ).shown();

   } }); builder.append( " \n " ); builder.append( "Statistics" ).append( " \n " ); float meanVal = stat.mean(h); double medVal = stat.median(h); float modeVal = stat.mode(h); builder.append( "Mean =

  " ).append(meanVal).append( " \n " );

   builder.append( "Median =

  " ).append(medVal).append( " \n " );

   builder.append( "Mode =

  " ).append(modeVal).append( " \n \n " );

   builder.append( "Graph Data" ).append( " \n " ); } catch (IOException e) { builder.append( "Error :" ).append(e.getMessage()).a ppend( " \n " ); }

   runOnUiThread( new Runnable() {

  @Override

  public void run() {

  result .setText( builder .toString());

   GraphView graph = (GraphView) findViewById(R.id. graph ); GridLabelRenderer gridlabel = graph.getGridLabelRenderer(); gridlabel.setHorizontalAxisTitle( "Dates : + " periode ); gridlabel.setVerticalAxisTitle( "Prices

  (Rupiah)" );

   graph.addSeries( mSeries1 ); graph.getViewport().setXAxisBoundsManual( true ); graph.getLegendRenderer().setVisible( true ); graph.getLegendRenderer().setAlign(LegendRenderer.LegendAlign. TOP ) ; graph.getViewport().setScalable( true ); graph.getViewport().setScrollableY( true ); graph.getViewport().setScalable( true ); graph.getViewport().setScalableY( true ); } }); } }).start(); } }

FILE AboutActivity.java CODE TO DISPLAY PROJECT INFORMATION

  package com.ste.sembakoapp; import Android.support.v7.app.AppCompatActivity; import Android.os.Bundle; public class AboutActivity extends AppCompatActivity {

  @Override

  protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout. activity_about ); } }

  FILE Node.java

CODE TO STORE ITEM DATA IN A NODE TO BE INSERTED INTO

LINKED LIST

  package com.ste.sembakoapp; public class node { private String nama ; private float [] harga ; private int [] tanggal ; private node next ; private node prev ; public node(String nama, float [] harga, int [] tanggal) { this . nama = nama; this . harga = harga; this . tanggal = tanggal; this . next = null ; this . prev = null ; } public node(node E, node next, node prev) { this . nama = E.getNama(); this . harga = E.getHarga(); this . tanggal = E.getTanggal(); this . next = next; this . prev = prev; } public String getNama() { return this . nama ; } public float [] getHarga() { return this . harga ; } public int [] getTanggal() { return this . tanggal ; } public node getNext() { return next ; } public node getPrev() { return prev ; } public void setNext(node next) { this . next = next; } public void setPrev(node prev) { this . prev = prev; } }

FILE LinkedListImpl.java CODE TO STORE DATA INTO LINKED LIST

  package com.ste.sembakoapp; public class LinkedListImpl { private node head ; private node tail ; private int size ; public LinkedListImpl() {

  size = ;

   } public int size() { return size ; } public boolean isEmpty() { return size == ; } public node getHead() { return head ; } public node get( int i) { if (i < size ) { node pointer = head ; int position =

  1 ;

  while (position <= i) { pointer = pointer.getNext(); position++; } return pointer; } else { return null ; } } public void addFirst(node E) { if ( size == ) {

  head = new node(E, null , null ); tail = head ; size ++;

   } else {

  head .setPrev(E);

   E.setNext( head );

  head = E; size ++;

   } } public void addLast(node E) { if ( size == ) {

  tail = new node(E, null , null ); head = tail ;

  size ++;

  size --;

  tail .setNext( null ); size --;

   del.setPrev( null );

  tail = tail .getPrev();

   node del = tail ;

  1 ) {

   } else if ( size >

  1 ) {

head = null ;

tail = null ;

size --;

   } } public void dellLast() { if ( size ==

   del.setNext( null );

   } else {

  head = head .getNext(); head .setPrev( null );

   node del = head ;

  1 ) {

   } else if ( size >

  1 ) {

head = null ;

tail = null ;

size --;

   } } public void dellFirst() { if ( size ==

  tail = E; size ++;

   E.setPrev( tail );

  tail .setNext(E);

   } } public void setHead(node head) { this . head = head; } public node getTail() { return tail ; } public void setTail(node tail) { this . tail = tail; } public int getSize() { return size ; } public void setSize( int size) { this . size = size; } }

  FILE Statistic.java

CODE TO CALCULATE STATISTICS (MEAN, MEDIAN, MODE) ON

DATA

  package com.ste.sembakoapp; import java.util.Arrays; public class Statistic { public static float mean( float [] m) { float sum = ; for ( int i = ; i < m. length ; i++) { sum += m[i]; } return sum / m. length ; } public static double median( float [] m) { int middle = m. length /

  

2 ;

   Arrays.sort(m); if (m. length %

  2 == 1 ) {

  return m[middle]; } else { return (m[middle-

  1 ] + m[middle]) / 2.0 ;

   } } public static float mode( float a[]) { float maxValue= ; float maxCount= ; for ( int i = ; i < a. length ; ++i) { int count = ; for ( int j = ; j < a. length ; ++j) { if (a[j] == a[i]) ++count; } if (count > maxCount) { maxCount = count; maxValue = a[i]; } } return maxValue; } }

FILE activity_about.xml CODE FOR ABOUT DISPLAY ACTIVITY

  <? 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: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= "com.ste.sembakoapp.AboutActivity"

  < TextView android :layout_width= "wrap_content" android :layout_height= "wrap_content"

android :textAppearance= "?android:attr/textAppearanceLarge"

android :text= "About" android :id= "@+id/textView2" android:layout_marginTop= "42dp" android:layout_alignParentTop= "true"

  /> android:layout_centerHorizontal= "true"

  < TextView android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:textAppearance= "?android:attr/textAppearanceMedium" android:text= "Purpose of the application is for monitoring basic commodities price from Ministry of Trades Website" android:id= "@+id/textView3" android:layout_marginTop= "36dp" android:layout_below= "@+id/textView2"

  /> android:layout_centerHorizontal= "true"

  < TextView android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:textAppearance= "?android:attr/textAppearanceMedium" android:text= "Created By : Stefani Yuanita" android:id= "@+id/textView4" android:layout_below= "@+id/textView3" android:layout_centerHorizontal= "true"

  /> android:layout_marginTop= "35dp"

  </ > RelativeLayout

FILE activity_detail.xml CODE FOR ABOUT DETAIL ACTIVITY

  Spinner

  android :id= "@+id/result" android :layout_width= "wrap_content" android :layout_height= "wrap_content"

  TextView

  /> <

  android :id= "@+id/getBtn" android :layout_width= "wrap_content" android :layout_height= "wrap_content" android :text= "Get Data"

android :layout_below= "@+id/item_spinner"

android :layout_centerHorizontal= "true" android :layout_marginTop= "41dp"

  Button

  /> <

  android :id= "@+id/item_spinner" android :layout_width= "fill_parent" android :layout_height= "wrap_content"

android :layout_below= "@+id/bulan_spinner"

android :layout_alignParentRight= "true" android :layout_alignParentEnd= "true" android :layout_marginTop= "33dp"

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

  ScrollView

  android :id= "@+id/bulan_spinner" android :layout_width= "fill_parent" android :layout_height= "wrap_content"

android :layout_below= "@+id/tahun_spinner"

android :layout_alignParentLeft= "true" android :layout_alignParentStart= "true" android :layout_marginTop= "31dp"

  Spinner

  android :id= "@+id/tahun_spinner" android :layout_width= "fill_parent" android :layout_height= "wrap_content" /> <

  Spinner

  > <

  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= "com.ste.sembakoapp.DetailActivity"

  RelativeLayout

  xmlns: android = "http://schemas.android.com/apk/res/android" android :layout_width= "match_parent" android :layout_height= "match_parent" android :fillViewport= "true"

>

<

  /> <

  android :text= "" android :textSize= "17sp" android :layout_marginTop= "57dp" android :layout_below= "@+id/getBtn"

android :layout_centerHorizontal= "true"

  /> <

  com.jjoe64.graphview.GraphView

  android :layout_width= "match_parent" android :layout_height= "200dip" android :layout_below= "@id/result" android :id= "@+id/graph" /> </

  RelativeLayout

  > </

  ScrollView

  >

FILE activity_display.xml CODE FOR ABOUT DISPLAY ACTIVITY

  ScrollView

  <? 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 :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= "com.ste.sembakoapp.display" > <

  Spinner

  android :id= "@+id/tahun_spinner" android :layout_width= "fill_parent" android :layout_height= "wrap_content" /> <

  Spinner

  android :id= "@+id/bulan_spinner" android :layout_width= "fill_parent" android :layout_height= "wrap_content" android :layout_marginTop= "29dp"

android :layout_below= "@+id/tahun_spinner"

android :layout_alignParentRight= "true" android :layout_alignParentEnd= "true"

  /> <

  Button

  android :id= "@+id/getBtn" android :layout_width= "wrap_content" android :layout_height= "wrap_content"

  xmlns: android = "http://schemas.android.com/apk/res/android" android :layout_width= "match_parent" android :layout_height= "match_parent" android :fillViewport= "true"

>

<

  android :text= "Get Data" android :layout_below= "@+id/bulan_spinner" android :layout_centerHorizontal= "true" /> <

  TextView

  android :id= "@+id/result"

android :layout_width= "wrap_content"

android :layout_height= "wrap_content"

android :text= "Result..." android :textSize= "17sp" android :layout_below= "@+id/getBtn" android :layout_centerHorizontal= "true" android :layout_marginTop= "27dp"

  /> </

  RelativeLayout

  > </

  ScrollView

  >

FILE activity_main.xml CODE FOR ABOUT MAIN ACTIVITY

  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= "com.ste.sembakoapp.MainActivity"

  > <

  Button

  android :layout_width= "wrap_content" android :layout_height= "wrap_content" android :text= "Price Monitoring" android :id= "@+id/menu1" android :layout_marginTop= "56dp" android :layout_alignParentTop= "true" android :layout_centerHorizontal= "true" /> <

  Button

  android :layout_width= "wrap_content" android :layout_height= "wrap_content" android :text= "Detail Item" android :id= "@+id/menu2" android :layout_marginTop= "31dp" android :layout_below= "@+id/menu1" android :layout_alignRight= "@+id/menu1" android :layout_alignEnd= "@+id/menu1" android :layout_alignLeft= "@+id/menu1" android :layout_alignStart= "@+id/menu1" />

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

  <

  Button

  android :layout_width= "wrap_content" android :layout_height= "wrap_content" android :text= "About" android :id= "@+id/menu3" android :layout_centerVertical= "true" android :layout_alignLeft= "@+id/menu2" android :layout_alignStart= "@+id/menu2" android :layout_alignRight= "@+id/menu2" android :layout_alignEnd= "@+id/menu2" /> </

  RelativeLayout

  >