My Program for MainActivity.kt
package com.example.android.aboutme
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<Button>(R.id.done_button).setOnClickListener {
addNickname(it)
}
}
private fun addNickname(view: View) {
val editText = findViewById<EditText>(R.id.nickname_edit)
val nicknameTextView = findViewById<TextView>(R.id.nickname_text)
nicknameTextView.text = editText.text
editText.visibility = View.GONE
view.visibility = View.GONE
nicknameTextView.visibility = View.VISIBLE
// Hide the keyboard.
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
}
Udacity Program for MainActivity.kt
package com.example.android.aboutme
import android.content.Context
import androidx.databinding.DataBindingUtil
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import android.view.View
import android.view.inputmethod.InputMethodManager
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import com.example.android.aboutme.databinding.ActivityMainBinding
/**
* Main Activity of the AboutMe app. This app demonstrates:
* * LinearLayout with TextViews, ImageView, Button, EditText, and ScrollView
* * ScrollView to display scrollable text
* * Getting user input with an EditText.
* * Click handler for a Button to retrieve text from an EditText and set it in a TextView.
* * Setting the visibility status of a view.
* * Data binding between MainActivity and activity_main.xml. How to remove findViewById,
* and how to display data in views using the data binding object.
*/
class MainActivity : AppCompatActivity() {
// TODO (03) Create a binding object in the MainActivity.
// Binding object for MainActivity.
// Name of the object is derived from the name of the activity or fragment.
private lateinit var binding: ActivityMainBinding
// TODO (09) Create an instance of MyName and set binding.myName to it.
// Instance of MyName data class.
private val myName: MyName = MyName("Aleks Haecky")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// TODO (04) Use DataBindingUtil to set the layout for MainActivity.
setContentView(R.layout.activity_main)
// TODO (05) Use the binding object to replace all calls to findViewById.
findViewById<Button>(R.id.done_button).setOnClickListener {
// Setting the content view using DataBindingUtil creates an instance of
// ActivityMainBinding from the supplied activity and the supplied layout. This object
// contains mappings between the activity and layout,
// and functionality to interact with them.
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
// Set the value of the myName variable that is declared and used in the layout file.
binding.myName = myName
// Click listener for the Done button.
binding.doneButton.setOnClickListener {
addNickname(it)
}
}
/**
* Click handler for the Done button.
* Demonstrates how data binding can be used to make code much more readable
* by eliminating calls to findViewById and changing data in the binding object.
*/
private fun addNickname(view: View) {
// TODO (10) set the nickname in the binding object and invalidateAll().
val editText = findViewById<EditText>(R.id.nickname_edit)
val nicknameTextView = findViewById<TextView>(R.id.nickname_text)
nicknameTextView.text = editText.text
editText.visibility = View.GONE
view.visibility = View.GONE
nicknameTextView.visibility = View.VISIBLE
binding.apply {
// Set the text for nicknameText to the value in nicknameEdit.
myName?.nickname = nicknameEdit.text.toString()
// Invalidate all binding expressions and request a new rebind to refresh UI
invalidateAll()
// Change which views are visible.
// Remove the EditText and the Button.
// With GONE they are invisible and do not occupy space.
nicknameEdit.visibility = View.GONE
doneButton.visibility = View.GONE
// Make the TexView with the nickname visible.
nicknameText.visibility = View.VISIBLE
}
// Hide the keyboard.
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
}
}.xml file
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<!-- Use a data block to declare variables. -->
<data>
<!-- Declare a variable by specifying a name and a data type. -->
<!-- Use fully qualified name for the type. -->
<variable
name="myName"
type="com.example.android.aboutme.MyName" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingStart="@dimen/padding"
android:paddingEnd="@dimen/padding">
<TextView
android:id="@+id/name_text"
style="@style/NameStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/mohd_ahsan_raza_khan"
android:textAlignment="center" />
<EditText
android:id="@+id/nickname_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_margin"
android:ems="10"
android:hint="@string/what_is_your_nickname"
android:textAlignment="center" />
<Button
android:id="@+id/done_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/done"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/layout_margin"
android:fontFamily="@font/roboto"
style="@style/Widget.AppCompat.Button.Colored" />
<TextView
android:id="@+id/nickname_text"
style="@style/NameStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:visibility="gone" />
<ImageView
android:id="@+id/star_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_margin"
android:contentDescription="@string/yellow_star"
app:srcCompat="@android:drawable/btn_star_big_on" />
<ScrollView
android:id="@+id/bio_scroll"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
style="@style/NameStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lineSpacingMultiplier="1.2"
android:paddingStart="@dimen/padding"
android:paddingEnd="@dimen/padding"
android:text="@string/bio" />
</ScrollView>
</LinearLayout>
</layout>
Udacity .xml file
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- Use a data block to declare variables. -->
<data>
<!-- Declare a variable by specifying a name and a data type. -->
<!-- Use fully qualified name for the type. -->
<variable
name="myName"
type="com.example.android.aboutme.MyName" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingStart="@dimen/padding"
android:paddingEnd="@dimen/padding">
<TextView
android:id="@+id/name_text"
style="@style/NameStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@={myName.name}"
android:textAlignment="center" />
<!-- Use "@={aboutMe.nickname}" annotation to reference a property -->
<!-- Reference the declared object (aboutMe) and the property (nickname). -->
<TextView
android:id="@+id/nickname_text"
style="@style/NameStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@={myName.nickname}"
android:textAlignment="center"
android:visibility="gone" />
<!-- Use "@={aboutMe.name}" annotation to reference a property -->
<!-- Reference the declared object (aboutMe) and the property (name). -->
<EditText
android:id="@+id/nickname_edit"
style="@style/NameStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/what_is_your_nickname"
android:inputType="textPersonName"
android:text="@={myName.nickname}"
android:textAlignment="center" />
<Button
android:id="@+id/done_button"
style="@style/Widget.AppCompat.Button.Colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/layout_margin"
android:fontFamily="@font/roboto"
android:text="@string/done"
android:textAlignment="center" />
<ImageView
android:id="@+id/star_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_margin"
android:contentDescription="@string/yellow_star"
app:srcCompat="@android:drawable/btn_star_big_on" />
<ScrollView
android:id="@+id/bio_scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="@dimen/layout_margin">
<TextView
android:id="@+id/bio_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lineSpacingMultiplier="@dimen/line_spacing_multiplier"
android:text="@string/bio"
android:textAppearance="@style/NameStyle" />
</ScrollView>
</LinearLayout>
</layout>
0 Comments