Major Softwares

  INDEX PAGE

  1. 簡介
  2. Java, Android和LibGDX好書推介
  3. Java, Android和LibGDX要學的知識
  4. 用Windows寫Java程式
  5. 用Eclipse寫Java程式
  6. 用Eclipse寫Android程式
  7. 用Eclipse寫LibGDX程式
  8. Standard Java Naming Conventions
  9. System.out.println()的用法和意思
  10. Where is main() method in Android?

LibGDX - Splash & Menu Screen

  1. LibGDX: World, Texture, Background, Camera, Viewport, Screen & OpenGL
  2. LibGDX: Texture, TextureRegion, SpriteBatch & Sprite
  3. UML(Unified Modeling Language): Class Diagram
  4. Type Casting, Upcasting & Downcasting
  5. @Override的用法和意思
  6. LibGDX: Scene2d & Graphical User Interface(GUI)
  7. LibGDX: Splash Screen
  8. LibGDX: Texture Packer
  9. LibGDX: BitmapFonts, JSON & Skin
  10. Android: R.java File
  11. Android: onClick事件的5種實現方式
  12. LibGDX: Game Menu Screen
  13. LibGDX: Advanced Game Menu Screen (using Abstract Screen)
  14. LibGDX: Disposable Interface
  15. Java & LibGDX: super keyword
  16. LibGDX: Advanced Game Menu Screen (using AssetManager)
  17. Java: Array, Arrays, List, ArrayList & LibGDX: Array
  18. LibGDX: File I/O (Preferences)
  19. LibGDX: Game Level Selection Screen
  20. LibGDX: Advanced Game Level Selection Screen (using AssetManager)

LibGDX - Tiled 2D Platform Game

  1. LibGDX: Lifecylce (Render() Method)
  2. LibGDX: Delta Time
  3. LibGDX: Animation & Spritesheet
  4. LibGDX: Keyboard, Mouse & Touch Screen Control
  5. Input Control (Polling VS Event Driven Input)
  6. LibGDX: Tiled (Background and Foreground)
  7. LibGDX: Jumping Action
  8. LibGDX: Tiled (Collision Detection)
  9. LibGDX: Tiled (Bullet Class)
  10. LibGDX: Audio (Sound & Music)
  11. LibGDX: Tiled (Scrollable Background with Camera & HUD)
  12. LibGDX: WorldController & WorldRenderer Class

LibGDX/Java - Card Game No.1 - Blackjack

  1. LibGDX: Install & Setup Android Studio IDE
  2. LibGDX: Use Android Studio to Run Java Hello World
  3. LibGDX: Use Android Studio to Run LibGDX Hello World
  4. Adobe Illustrator: Basic Components Part 1
  5. Adobe Illustrator: Basic Components Part 2
  6. Adobe Illustrator: BlackJack Table & Cards
  7. LibGDX: Blackjack Animation
  8. LibGDX: Interpolation
  9. Java: toString() Method
  10. Java: Blackjack Shuffle Methods
  11. LibGDX: Blackjack Shuffle Method
  12. Java: Blackjack Card Game

LibGDX - Others

  1. Making and Displaying App Icon
  2. LibGDX: Displaying Traditional and Simplified Chinese Characters
  3. LibGDX: Handling Different Screen Resolutions

Unity Game Engine & C#

  1. Visual Studio: C# Hello World
  2. Unity: C# Hello World
  3. Unity: Handling Different Screen Resolutions
  4. Unity: Life Cycle
  5. Unity: StartCoroutine, StopCoroutine, IEnumerator & Yield
  6. Unity: Splash Screen
  7. Unity: Fonts, Traditional and Simplified Chinese Characters
  8. Unity: GameObject, Class Object, new & Instantiate
  9. Unity: Start Screen with Glowing Animated Button
  10. Unity: C# Get & Set Modifier
  11. Unity: Delegates & Events
  12. Unity: File I/O, Read & Write Text File & PlayerPrefs
  13. Unity: Game Level Selection Screen
  14. Unity: Game Menu Screen & ScreenManager
  15. Unity: Encrypt and Decrypt Text File
  16. Unity: Options Menu Screen
  17. Unity: Convert Numbers Image to Custom Font

Unity - Card Game No.1 - Blackjack

  1. Unity: Blackjack Card Game - Part 1 (Full Game)
  2. Unity: Blackjack Card Game - Part 2
  3. Unity: Blackjack Card Game - Part 3
  4. Unity: Blackjack Card Game - Part 4
  5. Unity: Blackjack Card Game - Part 5
  6. Unity: Blackjack Card Game - Part 6
  7. Unity: Blackjack Card Game - Part 7

以下是預告-Coming soon!


Secret Weapon No.1

  1. Unity: Card Game No.2

Advanced Programming

  1. Unity: GPS Programming
  2. Unity: User Login System
  3. Unity: Augmented Reality (AR)

Secret Weapon No.2

  1. Unity: GPS & AR Application

第20節 - Android: R.java File

這一節我會介紹Android的R.java檔案。當我們明白R.java的用法和原理,我們就可以進入下一節(第21節 - Android: onClick事件的5種實現方式),因為每一個Android元件(例如: Button)和R.java是有直接關係的。

首先建立一個新的Android Project,預設是一個簡單的"Hello world!"程式,在gen/com.hkprogram.mydemo20/內就會產生一個R.java檔案。

注意,com.hkprogram.mydemo20就是我們建立Android Project時的Package Name,如下圖:

Android R.java File

1- R.java儲存在gen/com.hkprogram.mydemo20內。


R.java的工用

R.java檔案稱為資源類型檔,是用來記錄程式中所有的資源識別碼。它是由系統編譯自動產生。

每次當我們在.xml檔案上建立一個介面元件(例如: Button),然後在屬性欄設定它的id(例如: button1),R.java檔案內就會自動產生一個資源識別碼,資源識別碼是一組16進位的數字,但這數字不容易記下來用,所以就有一個與id名稱一樣的資源識別碼,方便使用。

例如: public static final int button1=0x7f09003f;

R.java檔案就好像一條橋樑,它把Graphical Layout(例如:activity_main.xml)檔案和背後的Java程式(例如:MainActivity.java)連接起來,這樣做我們就可以把屏幕上的任何介面元件連接背後的程式,為介面元件作出控制,如下概念圖:

Android R.java File

@+id/元件名稱 VS @id/元件名稱

當我們在Graphical Layout(例如:activity_main.xml)檔案上新增一個介面元件,須要在屬性欄設定它的id,例如:@+id/button1或@id/button1。

id屬性只能接受資源類型的值,也就是必須以@開頭的值,例如:@id/button1和@+id/button1。

如果在@後面使用“+”,表示系統會自動在R.java文件中生成相應的int類型變數。 變數名就是“/”後面的值,例如,@+id/button1會在R.java文件中生成int button1 = value,其中​​value是一個十六進制的數。 如果button1在R.java中已經存在同名的變數,就不再生成新的變數,而該組件會使用這個已存在的變數的值。

也就是說,如果使用@+id/button1,當R.java中存在名為button1變數時,則該組件會使用該變數的值作為標識。 如果不存在該變數,則添加一個新的變數,並為該變數增加相應的值(不會重複)。

Android R.java File
  1. 首先在activity_main.xml建立一個TextView元件。
  2. 另外在activity_main.xml建立一個Button元件。
  3. 在Button屬性欄新增一個id為@+id/button1。
  4. 在TextView屬性欄新增一個id為@+id/textView1。

R.id.button1

我在第9節 - System.out.println()的用法和意思介紹過System 是一個final class,如果一個Class定義為final,就代表這個Class不能被其他Class繼承(extends)。所以R也是一個final class不能被其他Class繼承(extends)。

R Class內有不同的inner Class,例如: array, color, drawable, id, layout和string。我們已id為例子,id也是final class,而static代表id是R的靜態內部類別(static inner class),意思是大家可以用R.id而不可以用成員內部類別(member inner class) e.g. r.id是不可以的!

inner class id內有三個變數(linearlayout1, button1和textView1),它們也是static final,則是它們也是類別變數(Class variable),意思是大家可以用id.button1,而不可以用成員變數(member variable) e.g. id_member.out 是不可以的! (假設id_member是id的成員變數)。

最後,把R.idid.button1合併,就成為R.id.button1。R.id.button1就可以在Android的任何地方使用。

Android R.java File

1- R.id.button1的由來。


例子1

Android R.java File
  1. 首先在activity_main.xml建立一個TextView元件。
  2. 另外在activity_main.xml建立一個Button元件。
  3. 在Button屬性欄新增一個id為@+id/button1。
  4. 再把Button顯示的字串改為"Click me"
  5. 在TextView屬性欄新增一個id為@+id/textView1。
  6. 開啟gen/com.hkprogram.mydemo20/R.java檔案。
  7. R.java檔案內就會自動產生對應的資源識別碼public static final int button1=0x7f09003f;。
  8. R.java檔案內就會自動產生對應的資源識別碼public static final int textView1=0x7f090040;。
  9. 系統提供findViewByID()方法,它可由id找到指定的元件,findViewByID()的語法如下:
    findViewByID(R.id.識別名稱);

    例如我們的TextView介面元件:
    findViewByID(R.id.textView1);

    在MainActivity.java內,我們就可以把activity_main.xml檔案的textView1介面元件與背後的Java程式MainActivity.java(textView)連接起來。
Download above code and sample pictures here!