970 likes | 1.17k Views
Mobile Programming Lecture 2. Layouts, Widgets, Toasts, and Event Handling. Lecture 1 Review. How to edit XML files in Eclipse? What holds all elements (Views) that appear to the user in an Activity? When should you make changes to R.java?
E N D
Mobile Programming Lecture 2 Layouts, Widgets, Toasts, and Event Handling
Lecture 1 Review • How to edit XML files in Eclipse? • What holds all elements (Views) that appear to the user in an Activity? • When should you make changes to R.java? • Give an example of a View (something in Android that extends View) • How to add a new XML Layout file?
Today's Agenda • Widgets • TextView, EditText, Buttons, SeekBar, NumberPicker • Layouts • LinearLayout, RelativeLayout, TableLayout • Toasts • Event Handling
Widgets - Finding available Widgets • To see some of the available Widgets, open one of the XML files in res/layout • View the XML file as Graphical Layout using the tabs at the bottom of the window • Select a category in the left pane if necessary (e.g. Form Widgets)
Widgets • All of these widgets are subclasses of the View class (i.e., View is the base class for widgets) • Try to avoid modifying XML files directly if you can • use Forms or WYSIWYG "wizzy wig" instead
Widgets - Examples • TextViews • displays text in your Activity • EditText • allows the user to enter some text • Button • Can be pressed by the user to perform an action • CheckBox • RadioGroup • ToggleButton
Widgets - id's • Id's are not required for each widget • R.java stores the id's for your widgets. How does the id's set and get? • Remember, don't edit the R.java file!
Widgets - id's • 2 ways to add a widget and set its android:id value • Using the Graphical Layout editor • Drag and drop a widget onto the canvas • Right click on the widget and select "Edit ID..." • Using the XML editor • type the XML code needed for the widget that you want • add android:id="@+id/id_name“ to its attributes
Widgets - id's Save your file, and the id will automatically be added R.java • android:id="@+id/id_name" • @ tells the XML parser to expand the rest of the id string and treat it as an ID resource • + is what causes the id to be added to R.java
Widgets As you may have noticed, you can do this for attributes other than the android:id attribute You can explore your options by right clicking on anything on the canvas
Widgets - layout_height/width Always set the android:layout_height and android:layout_width attributes in the XML file for your widgets. • NOT doing so is an easy way to get Force close • Drag and drop onto the canvas so that you don't have to worry about this
Widgets - layout_height/width Values for android:layout_height and android:layout_width • "wrap_content" • big enough to hold it's contents • "match_parent" • make the specified dimension as big as its parent • "fill_parent" • being deprecated, replaced by "match_parent"
Widgets - TextView We will experiment with some of the attributes for the TextView widget • android:text • e.g. "Hello World!" • android:textSize • e.g. "20dp" • android:textSize should be specified in dp (density-pixels), so that phones with different pixels-per-inch can be supported • android:textStyle • e.g. "italic" • android:textColor • e.g. #FFFFFF
Widgets - EditText Experimenting with the EditText widget. EditText is a subclass of TextView. • android:hint • e.g. "Enter your name" • android:inputType • textCapWords • textMultiLine • textPassword • textNumber • android:gravity • e.g. "right”, “center_vertical”, “top”
Widgets - Gravity Android:gravitysets the gravity of the content of the View its used on. Android:layout_gravitysets the gravity of the View or Layout in its parent.
Widgets - Button Experimenting with the Button widget. Button is a subclass of TextView. • android:inputType • android:gravity
Widgets - CheckBox Experimenting with the CheckBox widget. CheckBox is a subclass of Button • android:text • e.g. "I agree to the terms and conditions" • android:checked • "true" or "false" • sets the default value of the CheckBox
Widgets - RadioGroup / RadioButton • You usually want to drag a RadioGroup onto the canvas first • It's easy to drag and drop or remove RadioButtons to the RadioGroup
Widgets - RadioButton Experimenting with the RadioButton widget. RadioButton is a subclass of Button • android:text • e.g. "Female" • android:checked • "true" or "false" • sets the default value of the RadioButton
Widgets - ToggleButton Experimenting with the ToggleButton widget. ToggleButton is a subclass of Button • android:textOn • e.g. "GPS Enabled" • default value is "On" • android:textOff • e.g. "GPS Disabled" • default value is "Off" • android:checked • "true" or "false" • sets the default value of the ToggleButton
Widgets - SeekBar Experimenting with the SeekBar widget. • android:max • e.g. "100" • you can't set the min, it's always 0 • android:progress • e.g. "50" • sets the current position of the slider on the SeekBar
Widgets - RatingBar Experimenting with the RatingBar widget. • android:numStars • e.g. "6" • android:rating • e.g. "3" • sets the default rating • android:stepSize • e.g. "2" • rating is set in groups of stepSize • default = "1"
Layouts You can add multiple Layouts to the canvas!
Layouts • LinearLayout • RelativeLayout • TableLayout
Layouts - LinearLayout Review Only allows you to arrange widgets in a linear direction • horizontally or vertically • sometimes this is all you need!
Layouts - LinearLayout (Vertical) A B C D E
Layouts - LinearLayout • Nesting LinearLayouts can degrade performance • http://developer.android.com/training/improving-layouts/optimizing-layout.html • For your homeworks and projects, only use LinearLayout when you have good reason to do so
Layouts • Try not to waste too much time on editing the Layout in the XML editor • If you want to switch from LinearLayout to another Layout • Right click canvas • Change Layout... • Select a different Layout
Layouts • Want to add an entirely new UI? • Right click your project > New > Android XML File • Resource Type: Layout • File: xml_file_name.xml • Root Element: e.g. RelativeLayout • This stores the new XML file in res/layout
Layouts - RelativeLayout • Allows you to specify the position of one view B relative to another view A
Layouts - RelativeLayout B A Many possibilities! Unlike LinearLayout
Layouts - RelativeLayout A B Many possibilities! Unlike LinearLayout
Layouts - RelativeLayout B A Many possibilities! Unlike LinearLayout
Layouts - RelativeLayout • Many more possibilities for arranging your widgets, unlike LinearLayout. • RelativeLayout > LinearLayout • http://developer.android.com/guide/topics/ui/layout/relative.html
Layouts - TableLayout • Displays widgets in rows and columns similar to HTML tables • Your TableLayout usually consists of TableRows, which lay their children out horizontally • layout_width attribute of TableLayout's children are forced to be match_parent (even if you set it yourself) • Likewise, layout_height of a TableRow is forced to be wrap_content
Layouts - TableLayout A B C TableRow D TableRow TableRow
Layouts - Oversized Layouts • If you have some widgets that aren't being displayed on the screen, it could be because there isn't enough space on the screen to show them all • You won't be able to scroll by default
Layouts - ScrollView To solve this: • Add a ScrollView view to the root of your root layout (can be LinearLayout) • Move your main Layout to root of the ScrollView (e.g. RelativeLayout)
Toast • Finally, Java code • Before looking at Toasts ... let's look the autogenerated Java code. public class HelloWorldActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } }
Toast • Finally, Java code • Before looking at Toasts ... let's look the autogenerated Java code. public class HelloWorldActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } Main point of entry into your code. Called when the Activity is created.
Toast • Finally, Java code • Before looking at Toasts ... let's look the autogenerated Java code. public class HelloWorldActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } Android needs to do who knows what before you can do anything.