Kotlin

Kotlin Cơ bản

Nội dung

  • Val và var
  • Kiểu dữ liệu
  • Null safety
  • Toán tử so sánh
  • Check kiểu và casting
  • Cấu trúc điều khiển
  • Visibility modifier
  • Khởi tạo một lớp
  • Biểu thức This
  • Package

1 - Val và var

Trong Java chúng ta khai báo biến như sau:

  String s;
  s = "hello";
  final String u = "hi"; //khai báo một constant

Với Kotlin, chúng ta có từ khóa var để khai báo biến và val để khai báo một constant, cú pháp sẽ là:

  var s: String
  s = "hello"
  val v: String = "hi" //khai báo một constant, bắt buộc phải khởi tạo khi khai báo
  var u = "hey" //Có thể không xác định kiểu cho biến mà để tự compiler xác định

Note:

  • Kotlin không yêu cầu dấu ; sau mỗi statement nữa
  • Cơ chế giúp Kotlin tự xác định kiểu của biến gọi là Type inference, ngoài tự suy ra kiểu biến, cơ chế này còn sử dụng trong single-expression function (sẽ nói sau), làm cho boilerplate code giảm đi rất nhiều

2 - Kiểu dữ liệu

Mặc định trong Kotlin đều là đối tượng, không còn dữ liệu kiểu nguyên thủy (primitive type) nữa. Điều này giúp cho mọi biến đều sử dụng được generic, gọi được các function, property hoặc có thể gán được bằng null

Tiếp theo, chúng ta sẽ nói về các kiểu dữ liệu trong Kotlin: :

numbers
characters
booleans
strings
arrays
  • Numbers :

Size Độ dài bit của từng kiểu được thể hiện trong bảng sau:

Note: character không được coi là kiểu số trong Kotlin

Constant literal Tương tự như trong Java, Kotlin cũng có các constant literal để xác định kiểu dữ liệu cho các số:

package com.corochann.helloandroidtvfromscrach;
 
import android.os.Bundle;
import android.support.v17.leanback.app.BrowseFragment;
import android.util.Log;
 
public class MainFragment extends BrowseFragment {
    private static final String TAG = MainFragment.class.getSimpleName();
 
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        Log.i(TAG, "onActivityCreated");
        super.onActivityCreated(savedInstanceState);
 
    }
}

(I) Build và chạy 😄 !

BrowseFragment bao gồm HeadersFragment & RowsFragment . Ở phía trên bạn có thể thấy HeaderFragment(header) nằm ở phía bên phải, còn RowsFragment(content) nằm ở phía bên trái. Chúng ta sẽ thiết kế nội dung cho 2 phần này ở phía sau. Source code : github

  1. Adding setupUIElements() to MainFragment.java

Chúng ta sẽ thêm phương thức setupUIElements() vào trong MainFragment.java, để setup thông tin ứng dụng. MainFragment.java :

package com.corochann.helloandroidtvfromscrach;
 
import android.os.Bundle;
import android.support.v17.leanback.app.BrowseFragment;
import android.util.Log;
 
public class MainFragment extends BrowseFragment {
    private static final String TAG = MainFragment.class.getSimpleName();
 
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        Log.i(TAG, "onActivityCreated");
        super.onActivityCreated(savedInstanceState);
        setupUIElements();
    }
    
    private void setupUIElements() {
        // setBadgeDrawable(getActivity().getResources().getDrawable(R.drawable.videos_by_google_banner));
        setTitle("Hello Android TV!"); // Badge, when set, takes precedent
        // over title
        setHeadersState(HEADERS_ENABLED);
        setHeadersTransitionOnBackEnabled(true);
 
        // set fastLane (or headers) background color
        setBrandColor(getResources().getColor(R.color.fastlane_background));
        // set search icon color
        setSearchAffordanceColor(getResources().getColor(R.color.search_opaque));
    }
}

Ở đây chúng ta đã thiết lập :

  • Application title or Application icon
  • Brand color

Thông tin color được tham chiếu trong file colors.xml

colors.xml :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="fastlane_background">#0096e6</color>
    <color name="search_opaque">#ffaa3f</color>
</resources>

(II) Build and Run!

Bây giờ bạn có thể thấy phần header bên trái đã được thay đổi color.

Ngoài ra bạn có thể thay đổi tiêu đề bằng logo bằng cách sử dụng setBadgeDrawable() thay vì setTitle() khi đó bạn sẽ được như sau :

Source code github.

  1. Modify Android Manifest.

Bạn có thể nhận thấy rằng biểu tượng icon của ứng dụng sẽ không được hiển thị trong trình khởi chạy LeanBack Laucher(Android TV home laucher app) cho đến bây giờ. Chúng ta cần cấu hình trong manifest để ứng dụng của mình được coi là Android TV app. AndroidManifest.xml :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.corochann.androidtvapptutorial" >
 
 
    <!-- TV app need to declare touchscreen not required -->
    <uses-feature
        android:name="android.hardware.touchscreen"
        android:required="false" />
 
    <!--
     true:  your app runs on only TV
     false: your app runs on phone and TV -->
    <uses-feature
        android:name="android.software.leanback"
        android:required="true" />
 
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.Leanback" >
        <activity
            android:name=".MainActivity"
            android:icon="@drawable/app_icon_your_company"
            android:label="@string/app_name"
            android:logo="@drawable/app_icon_your_company" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>

Note: Thêm app icon app_icon_your_compan.png vào trong main/res/drawble/ folder để hiển thị icon trong Leanback laucher. Ngoài ra bạn có thể hiển thị icon app trong Leanback laucher bằng cách khai báo trong intent-filer :

 <category android:name="android.intent.category.LEANBACK_LAUNCHER" />

(III) Build and Run!

Để hiển thị icon application trong Leanback launcher bạn có thể khai báo :

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.Leanback" >
 
        ...

Note : Activity icon và applicaiton icon là khác nhau.

Kết luận :

Để xem chi tiết về cách setting Mainifest cho Android TV bạn có thể tham khảo tại Android Developers page . Trong phần tiếp theo tôi sẽ giải thích khái niệm về BrowseFragment, HeadersFragment, RowsFragment, Adapter và Presenter để hiển thị các đối tượng có thể có trong ứng dụng của chúng ta. Cảm ơn các bạn, chúc các bạn học tập thật tốt !!!

Tham khảo :

Registration Login
Sign in with social account
or
Lost your Password?
Registration Login
Sign in with social account
or
A password will be send on your post
Registration Login
Registration