1. เข้า https://developer.android.com/studio
Download : android-studio-ide-182.5264788-windows.exe 947 MB
แล้วก็ install
- ในเครื่องมี c:\program files\java\jre อยูแล้ว จึงไม่ติดตั้งเพิ่ม
- Data sharing : Settings | Appearance % Behavior | System Settings | Data Sharing
- ตอนติดตั้งไม่ได้เลือก จึงคลิ๊ก Don't send แทนที่จะคลิ๊ก Send usage statistics to Google
- ก็ไม่ได้เปลี่ยน option ตอนติดตั้งกด next อย่างเดียว
- Downloading Component 
(repository 339.1 MB, sdk-tools 148.9 MB, sources 40.6MB, platform 72.1 MB, 
emulator 257.9 MB, build-tools 55.7 MB)
Failed to install Intel HAXM. For details, please check the installation log: "C:\Users\LAB\AppData\Local\Temp\haxm_log.txt"
HAXM installation failed. To install HAXM follow the instructions found at: https://software.intel.com/android/articles/installation-instructions-for-intel-hardware-accelerated-execution-manager-windows
2. Welcome to Android Studio 3.3.1
- [Start a new Android Studio project]
- Open an existing Android Studio project
- Check out project from Version Control
- Profile or debug APK
- Import project (Gradle, Eclipse ADT, etc.)
- Import an Android code sample
3. Phone and Tablet
[Navigation Drawer Activity]
Configure your project 
Name = My Application
API 15: Android 4.0.3 (IceCreamSandwich)
4. Project
[MyApplication Tab]
	.idea
	app
	gradle
	.gitignore
	build.gradle
	gradle.properties
	gradlew
	gradlew.bat
	local.properties
	MyApplication.iml
	settings.gradle
[Gradle Scripts]
	build.gradle
	gradle-wrapper.properties
	gradle.properties
	settings.gradle
	local.properties
5. รอ Build: จนพบ completed successfully
ครั้งแรกรอให้การทำงานใน status bar จบจบ
จะพบ tab: MainActivity.java, content_main.xml
6. [content_main.xml]
กดสลับไปมาระหว่าง  
- Design ที่ปรับค่า Attributes ได้
- Text ที่เป็น xml code ได้ 
เพื่อดูภาพหน้าจอการทำงาน
7. กดปุ่ม > เพื่อ run app
หรือ Menu, Run หรือ Shift + F10
8. ยังไม่พบ device 
Create new Virtual Device
- Nexus 5X , 5.2in, 1080*1920, 420dpi
- Oreo Download , 26, x86, android 8.0 (733.7 MB)
- Nougat Download , 24, x86, android 7.0 (775.1 MB)
โทรศัพท์ของผมใช้ 8.1 Oreo ซึ่งรองรับ 8.0 แน่นอน
Creat AVD Name = Nexus 5X API 26
Creat AVD Name = Nexus 5X API 24
9. หลังเลือก Device
Instant Run : Install and Continue
10.Event log
Problem : x86 emulation currently requires hardware acceleration! 
10.1 check : Tools, SDK Manager, Android SDK, SDK Tools
พบว่า  Intel x86 Emulator Accelerator (HAXM instalelr) 7.3.2 : installed
10.2 solution:
C:\Users\LAB\AppData\Local\Android\Sdk\extras\intel\Hardware_Accelerated_Execution_Manager\intelhaxm-android.exe
https://ourcodeworld.com/articles/read/296/how-to-solve-android-avd-error-in-windows-x86-emulation-currently-requires-hardware-acceleration
11. Docker Desktop Service
Stop & Manual
Setting : General
uncheck : Start Docker Desktop when you login
uncheck : Automatically check for updates
12. hyper-v
Turn Windows Features On or Off
13 content-main.xml
เปลี่ยน "hello world!" เป็น "hello world"
แก้ไขผ่าน design, attributes tab, TextView text="hello world"
14. กด apply change เพื่อทำ instant run
รอสักพัก การเปลี่ยนแปลงก็จะปรากฎใน emulator 
15. content_main.xml
ต้องการ คลิ๊ก hello world!
ถ้าค่าของ Textview เป็น 0 ก็ใส่ 1 เข้าไปแทน
- android:id="@+id/text1"
- android:clickable="true"
16. MainActivity.java
เพิ่ม method ใน public class MainActivity {}
ทำให้เกิดการจัดคู่ระหว่าง onClick ใน content_main.xml และ MainActivity.java
ตำแหน่งแรก
	import android.widget.TextView;	
ตำแหน่งที่สอง
	เพิ่มใน protected void onCreate(){}
        TextView t = (TextView)findViewById(R.id.text1);
        t.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                TextView t = (TextView)findViewById(R.id.text1);
                //Integer v = Integer.parseInt(t.getText().toString()) + 1;
                if(t.getText().equals("Hello World!")) {
                   t.setText(String.valueOf("0"));
                } else{
                    int t1 = Integer.parseInt(t.getText().toString()) + 1;
                    t.setText(Integer.toString(t1));
                }
            }
        });
https://devahoy.com/posts/android-button-onclick-listener-tutorial/
17. การเพิ่มภาพใน drawable
ลากวางได้เลย
ใน MyApplication, app, src, main, res, drawable
พบ sample.png
18. การเพิ่มภาพใน page บน Design view
- Palette, Common, ImageView ลากลงไปใน page
- เลือก Project แล้ว click ภาพ
- ใช้ mouse ปรับขนาดของ layout_width และ layout_height ของ imageView1 ได้
- กำหนดเป็น 100dp
19. เพิ่มคำสั่งใน MainActivity.java
import android.widget.ImageView;
        ImageView i = (ImageView)findViewById(R.id.imageView3);
        i.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                TextView t = (TextView)findViewById(R.id.text1);
                if(t.getText().equals("Hello World!")) {
                    t.setText(String.valueOf("0"));
                } else{
                    int t1 = Integer.parseInt(t.getText().toString()) + 1;
                    t.setText(Integer.toString(t1));
                }
            }
        });
20. copy content_main.xml เป็น two.xml
https://chrisrisner.com/Using-Fragments-with-the-Navigation-Drawer-Activity
https://medium.com/android-hunger/how-to-implement-navigation-drawer-in-your-android-app-with-an-example-48e08530339f
http://www.arjunsk.com/android/how-to-use-fragment-layout-and-scroll-layout-in-android-studio/
https://stablekernel.com/using-fragments-to-simplify-android-navigation-drawers/
*** https://www.simplifiedcoding.net/android-navigation-drawer-example-using-fragments/
https://stackoverflow.com/questions/21192386/android-fragment-onclick-button-method
[สร้าง layout]
app, res, layout : new - Layout resource file 
fragment1.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
</android.support.constraint.ConstraintLayout>
แล้วสร้าง 2 วัตถุ
- android:id="@+id/button1"
- android:id="@+id/text1"
  android:paddingTop="50dp" จะได้ไม่ชนกับ button1
		
[ปรับ content_main]
content_main.xml
ลบ TextView เปลี่ยนเป็น FrameLayout
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
[สร้าง java] 
ใน  package com.example.navfragment;
menu1.java
package com.example.navfragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
public class menu1 extends Fragment implements View.OnClickListener {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment1, container, false);
        Button b = (Button) v.findViewById(R.id.button1);
        b.setOnClickListener(this);
        TextView t = (TextView) v.findViewById(R.id.text1);
        t.setOnClickListener(this);
        View tv = v.findViewById(R.id.text1);
        ((TextView)tv).setText("hello");
        return v;
    }
    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);        
        getActivity().setTitle("Menu 1");
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.button1:
                //System.exit(1);
                View tv1 = v.findViewById(R.id.button1);
                ((TextView)tv1).setText("1");
                break;
            case R.id.text1:
                TextView tv2 = v.findViewById(R.id.text1);
                if(tv2.getText().equals("hello")) {
                    tv2.setText(String.valueOf("0"));
                } else{
                    int tmp = Integer.parseInt(tv2.getText().toString()) + 1;
                    tv2.setText(Integer.toString(tmp));
                }
                break;
        }
    }
}
		
[MainActivity.java]
ใน app, java, com.example.navfragment
1. สร้าง method
	private void displaySelectedScreen(int itemId) {
        //creating fragment object
        Fragment fragment = null;
        //initializing the fragment object which is selected 
        switch (itemId) {
            case R.id.nav_camera:
                fragment = new fragment(); // MainActivity
                break;		
            case R.id.nav_gallery:
                fragment = new menu1();
                break;            
        }
 
        //replacing the fragment
        if (fragment != null) {
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.content_frame, fragment);
            ft.commit();
        }
 
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
    }
2. เพิ่มบรรทัดสุดท้ายของ on create	
displaySelectedScreen(R.id.nav_camera);	
3. ใน public boolean onNavigationItemSelected(MenuItem item) 
เหลือ 2 บรรทัด
displaySelectedScreen(item.getItemId());
return true;
c:/users/%USERNAME%/AndroidStudioProjects/navfragment
Source : <a href="navfragment.zip">navfragment.zip</a> 142,736 bytes
Build : <a href="navfragment.apk">navfragment.apk</a> 2,277,379 bytes