Android Studio: Cara Membuat Android Apps 7
In this tutorial we’ll start making a useful Android unit conversion app. I’ll show you everything this time because I on purpose didn’t pre-plan anything.
I’ll cover relative layouts, grid layouts, array resources, Array Adapters, Spinners, and more. In the next video I’ll finish the entire app. Like always all the code follows the video below. If it is still the month of July 2014, don’t forget to sign up to win a Samsung Galaxy Note 3 in my current contest.
If you like videos like this it helps to share it on Google Plus with a click here
Code From the Video
Use Case Description
SIMPLE ACTIONS
1. The user enters a number they want converted into an EditText
2. They change the spinner to the unit of measure to convert from
3. The other conversion types all show their measurement version of that unit amount
1. Create the layout in activity_main.xml
a. Use relative layout for for label "Convert From", Edittext and Spinner
b. Use GridLayout for bottom that contains 2 columns and 6 rows
c. Make gridlayout a blue color
d. Use the units teaspoons, tablespoons, cup, ounces, pints, quarts, gallons, pounds, milliliter, liter, milligram kilograms
2. Setup MainActivity
a. Create Spinner, EditText, TextViews
b. In onCreate
I. add items to the spinner
i. Create an ArrayAdapter using String array resource (Make strings.xml)
ii. Define the layout to use with the Spinner
iii. Connect the Adapter to the Spinner
II. Add a listener to the Spinner
i. Use setOnItemSelectedListener for Spinner
ii. NOTE : Maybe check if I am going to use a base class for unit conversion
III. Get the value in the EditText
IV. Initialize the TextViews
activity_main.xml
<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:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.newthinktank.androidlayouts2.app.MainActivity">
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="@string/convert_from_text" android:id="@+id/convert_from_text_view" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginRight="20dp" />
<EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/amount_text_view" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/convert_from_text_view" android:inputType="numberDecimal" android:text="1.0"/>
<Spinner android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/unit_type_spinner" android:layout_below="@+id/amount_text_view" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"/>
<GridLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/unit_type_spinner" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:columnCount="2" android:rowCount="6" android:orientation="horizontal" android:background="#ffdae6ff" android:padding="15dp">
<TextView android:id="@+id/tsp_text_view" android:text="@string/default_teaspoon_value" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left|top" android:layout_marginRight="30dp" android:layout_marginBottom="30dp" />
<TextView android:id="@+id/cup_text_view" android:text=".0208 cup" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_gravity="left|top" />
<TextView android:id="@+id/tbs_text_view" android:text=".3333 tbs" android:layout_gravity="left|top" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_marginRight="30dp" android:layout_marginBottom="30dp" />
<TextView android:id="@+id/oz_text_view" android:text=".1666 oz" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_gravity="left|top" />
<TextView android:id="@+id/kg_text_view" android:text=".0057 kg" android:layout_gravity="left|top" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_marginRight="30dp" android:layout_marginBottom="30dp" />
<TextView android:id="@+id/quart_text_view" android:text=".0052 quart" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_gravity="left|top" />
<TextView android:id="@+id/gallon_text_view" android:text=".0013 gallon" android:layout_gravity="left|top" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_marginRight="30dp" android:layout_marginBottom="30dp" />
<TextView android:id="@+id/pound_text_view" android:text=".0125 pound" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_gravity="left|top" />
<TextView android:id="@+id/ml_text_view" android:text="4.9289 ml" android:layout_gravity="left|top" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_marginRight="30dp" android:layout_marginBottom="30dp" />
<TextView android:id="@+id/liter_text_view" android:text=".0049 liter" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_gravity="left|top" />
<TextView android:id="@+id/mg_text_view" android:text="5687.5000 mg" android:layout_gravity="left|top" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_marginRight="30dp" android:layout_marginBottom="15dp" />
<TextView android:id="@+id/pint_text_view" android:text=".0104 pint" android:textAppearance="?android:attr/textAppearanceMedium" android:layout_gravity="left|top" />
</GridLayout>
</RelativeLayout>
MainActivity.java
package com.newthinktank.androidlayouts2.app;
import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
private Spinner unitTypeSpinner;
private EditText amountTextView;
TextView teaspoonTextView, tablespoonTextView, cupTextView, ounceTextView, pintTextView, quartTextView, gallonTextView, poundTextView, milliliterTextView, literTextView, milligramTextView, kilogramTextView;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
// Fills the spinner with the unit options addItemsToUnitTypeSpinner();
// Add listener to the Spinner addListenerToUnitTypeSpinner();
// Get a reference to the edit text view to retrieve the amount of the unit type amountTextView = (EditText) findViewById(R.id.amount_text_view);
initializeTextViews();
}
public void initializeTextViews(){
teaspoonTextView = (TextView) findViewById(R.id.tsp_text_view); tablespoonTextView = (TextView) findViewById(R.id.tbs_text_view); cupTextView = (TextView) findViewById(R.id.cup_text_view); ounceTextView = (TextView) findViewById(R.id.oz_text_view); pintTextView = (TextView) findViewById(R.id.pint_text_view); quartTextView = (TextView) findViewById(R.id.quart_text_view); gallonTextView = (TextView) findViewById(R.id.gallon_text_view); poundTextView = (TextView) findViewById(R.id.pound_text_view); milliliterTextView = (TextView) findViewById(R.id.ml_text_view); literTextView = (TextView) findViewById(R.id.liter_text_view); milligramTextView = (TextView) findViewById(R.id.mg_text_view); kilogramTextView = (TextView) findViewById(R.id.kg_text_view);
}
public void addItemsToUnitTypeSpinner(){
// Get a reference to the spinner unitTypeSpinner = (Spinner) findViewById(R.id.unit_type_spinner);
// Create an ArrayAdapter using the string array and a default spinner layout ArrayAdapter<CharSequence> unitTypeSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.conversion_types, android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears unitTypeSpinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner unitTypeSpinner.setAdapter(unitTypeSpinnerAdapter);
}
public void addListenerToUnitTypeSpinner() { unitTypeSpinner = (Spinner) findViewById(R.id.unit_type_spinner); unitTypeSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View arg1, int pos, long arg3) { // Get the item selected in the Spinner String itemSelectedInSpinner = parent.getItemAtPosition(pos).toString();
// Verify if I'm converting from teaspoon so that I use the right // conversion algorithm checkIfConvertingFromTsp(itemSelectedInSpinner);
} public void onNothingSelected(AdapterView<?> arg0) { // TODO maybe add something here later } }); }
conversion_types.xml
<?xml version="1.0" encoding="utf-8"?> <resources>
<string-array name="conversion_types"> <item>teaspoon</item> <item>tablespoon</item> <item>cup</item> <item>ounce</item> <item>pint</item> <item>quart</item> <item>gallon</item> <item>pound</item> <item>milliliter</item> <item>liter</item> <item>milligram</item> <item>kilogram</item> </string-array>
</resources>
- See more at: http://www.newthinktank.com/2014/07/make-android-apps-7/#sthash.kPcaXnO6.dpuf