Gatsby Starter Blog

ทบทวนบทเรียน Android Development กับ Nanodegree ที่ Udacity

August 14, 2015

Application แรก Untitled เพื่อเป็นมารยาทที่ดีในการเข้าเรียนผมไม่ได้ I’m not allow share this video ออกมาให้ดูนะครับ only capture screen มาเฉยๆ คงไม่เสียมารยาทมากไป เขาให้ทำ App ตามรูปนี่แหละ Application แรก มี Event Onclick ที่ปุ่มสีแดงให้ขึ้น Toast แค่นั้น สิ่งที่ได้ Feedback กลับมาก็คือ

  1. สิ่งนึงที่สำคัญคือการกดหนดขนาตัวอักษรหรือขนาดความกว้างต่างๆ บน Android โดย Coach ที่ Udacity ได้แนะนำ รวมกับการหาข้อมูลของผมที่ Stack Overflow เขาแนะนำให้ใช้ SP Unit ตามคำอธิบายด้านล่างนี้ “It is recommended to use sp (scale-independent) unit of measurement for text size”

px Pixels - corresponds to actual pixels on the screen.

in Inches - based on the physical size of the screen. 1 Inch = 2.54 centimeters

mm Millimeters - based on the physical size of the screen.

pt Points - 1/72 of an inch based on the physical size of the screen.

dp Density-independent Pixels - an abstract unit that is based on the physical density of the screen. These units are relative to a 160 dpi screen, so one dp is one pixel on a 160 dpi screen. The ratio of dp-to-pixel will change with the screen density, but not necessarily in direct proportion. Note: The compiler accepts both “dip” and “dp”, though “dp” is more consistent with “sp”.

sp Scale-independent Pixels - this is like the dp unit, but it is also scaled by the user’s font size preference. It is recommend you use this unit when specifying font sizes, so they will be adjusted for both the screen density and user’s preference.

<LinearLayout 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:layout_marginTop="@dimen/activity_vertical_margin" android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">


    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="My Nanodegree Apps!"
        android:textSize="24dp"
  1. เป็นช่วงที่ทำได้ดีคือการกำหนด Identifiers ปล ก็พวก ID นั่นแหละ แต่ว่าผมชอบเขียนสั่งการฝั่ง Code เลยมีความจำเป็นต้องใช้ ID ซึ่งจริงๆ แล้วมันก็ควรทำนี่หน่า
        android:gravity="center"
    />

    <TableLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="25dp"
            android:paddingRight="50dp"
            android:paddingLeft="50dp">
        <Button
            android:id="@+id/btSpotify"
  1. จริงๆ ข้อนี้ผมก็อยากทำนะ แต่ว่าเจ้า Android Studio ผมกด Hot key แล้วมันไม่ทำให้ ก็คือ ใช้งานไฟล์ String.xml เพื่อเก็บค่าตัวแปรที่ใช้ซ้ำบ่อยๆ เช่นเดียวกันกับกรณีของ colors.xml ที่ใช้เก็บค่าสี
           android:layout_height="@dimen/height_button"
            android:background="#EF8C35"
 android:textAllCaps="true"
            android:text="Sportify App"
            />
        <Button
            android:id="@+id/btScore"
  1. ข้อนี่ผมลืมนึกไปตอนทำ Lab ก็คือการสร้าง Style ไว้ตรงกลางเพื่อเรียกใช้เพราะ Attributes ส่วนมากนั้นซ้ำๆ และเหมือนกัน จะดีกว่ามากถ้าเอาไปรวมไว้ตรงกลาง ประมาณว่าเปลี่ยนที่เดียวได้หมด และลดปริมาณ Code บน Layout ด้วย http://developer.android.com/guide/topics/ui/themes.html
  2. การ Find หาปุ่มมาเพื่อเขียน Event Onclick นั้่นมีความยากลำบากกว่าการที่เราใช้ XML Attribute,XML portion บน Layout กว่ามาก เราควรไปใช้งานที่นั่นเพราะว่า
public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btCapStone = (Button)this.findViewById(R.id.btCapstone);
        btCapStone.setOnClickListener(new View.OnClickListener() {

นี่คือตัวอย่างการใช้งาน

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/button1" />
Java portion

public void showToast(View v) {
    //Add some logic
}
Anonymous Java Class
XML Portion

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="showToast"/>

findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //Add some logic
    }
});

Comment ของชุดนี้ขอไม่แปลทั้งหมดนะยาว แต่อ่านสรุปง่ายๆคือ สั้นกว่าและ API ใหม่กว่าน่าจะดีกว่า และสามารถใช้กับ Class อะไรก็ได้ประหยัดเวลาการเขียน เราควรจะใช้วิธีนี้เท่าที่เราจะสามารถทำได้

  1. ข้อสุดท้าย minSdkVersion อย่าลืมกำหนดล่ะ และควรเลือกรุ่น Major ที่มีคนใช้เยอะสุดไว้ก่อน
apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.0 rc3"

    defaultConfig {
        applicationId "com.itopplus.tonmanport.myappportfolio"
        minSdkVersion 15