Skip to content

Sumarios

fmcarvalho edited this page Oct 1, 2019 · 34 revisions

Aulas:


09-09-2019

  • Apresentação.
  • Âmbito da disciplina.
  • Avaliação teórica e prática (3 entregas).

  • Caracterização geral da linguagem Kotlin:
    • Tipificação estática com inferência de tipos
    • Object-Oriented com suporte para os estilos imperativo e funcional
  • Funções: fun [<parametros de tipo>] <nome> ([parametros formais]) : [tipo retorno] {...}
  • Tipo Função -- notação especial correspondente à assinatura, i.e. (Tipo de Parametros) -> Tipo Retorno
  • Tipo Função e.g. (Int) -> String, () -> Unit, entre outros.
  • Typealias e.g. Predicate<T> = (T) -> Boolean
  • lambdas: { param1, param2, ... -> block } or { block }
  • it -- implicit lambda parameter
  • Function references - :: like Java
  • SAM (Single Abstract Method) compatível com lambda
  • read-only (e.g. listOf(), setOf) <vs> mutable collections (e.g. mutableListOf, mutableSetOf)

  • ? for Nullable -- val variable: Type? = value
  • ?. -- safe call -- access member only if not null. Otherwise returns null.

  • Basic parts: Manifest, Main Activity e Gradle build;
  • Activity: UI Component (subclasse de Context)
  • Activity:
    • visual + comportamento
    • visual (src/main/res/layout/...xml) + comportamento (src/main/java)
    • Analogia ao front-end Web: visual (HTML e CSS) + comportamento (Javascript)
  • Activity -- ciclo de vida, i.e. Created, Started (visível), Resumed (primeiro plano), Paused, Stopped, etc;
  • Activity -- métodos "gancho", i.e. onCreated(), onStarted(), etc
  • Actvities sao iniciadas por instâncias de Intent
  • Intent:
    • mensagem assíncrona;
    • ligação entre componentes (e.g. Activities)
  • Main Activity <-- intent.action.MAIN
  • UI = Layouts + Widgets:
    • Layouts = ViewGroup objects = widget containers
    • Widgets = View objects = UI components e.g. botões, caixas de texto, etc
  • ConstraintLayout
  • Android Studio Layout Editor ---> activity_...xml
  • R - classe gerada dinamicamente com constantes dos identificadores (e.g. R.id.buttonSend)
  • Eventos e Listeners -- view.setOnClickListener(View -> Unit)
  • findViewById(@IdRes int id)
  • Intent - representa uma mensagem assíncrona; ligação entre componentes (e.g. Activities)
    • e.g. Intent(this, DisplayMessageActivity::class.java):
    • Exlicit: identifica o tipo da actividade a ser instanciada (DisplayMessageActivity::class.java)
    • putExtra(key, value) e getStringExtra(key)
  • startActivity(intent)
  • Android Manifest: android:parentActivityName --> navegação
  • Activity: ciclo de vida
  • demo: logging lifecycle state transitions e.g. override fun onStart(){...}
  • Intercalação entre estados de activities da mesma App.
  • Lifecycle-Aware Components :
    • LifecycleOwner ----> LifecycleObserver
    • myLifecycleOwner.getLifecycle().addObserver(MyObserver())
    • e.g. @OnLifecycleEvent(Lifecycle.Event.ON_START)
  • Custom Views:
    • constructor(context: Context, attrs: AttributeSet)
    • custom drawing: onDraw(canvas: Canvas) e Paint
    • interaction: override fun onTouchEvent(event: MotionEvent)
  • Concepção da app Sketcher:
    • SketcherView --->* Line --->* XyPair
  • Implementação de SketcherView:
val lines : MutableList<Line> = mutableListOf()
var curr : Line? = null

override fun onDraw(canvas: Canvas) = lines.forEach { it.draw(canvas) }
override fun onTouchEvent(event: MotionEvent): Boolean { ... }
  • TPC: Identificar a instrução em falta para que a UI seja actualizada em resposta da interacção com utilizador.
Clone this wiki locally