Standard Java Naming Conventions
System.out.println()的用法和意思
Where is main() method in Android?
LibGDX - Splash & Menu Screen
LibGDX: World, Texture, Background, Camera, Viewport, Screen & OpenGL
LibGDX: Texture, TextureRegion, SpriteBatch & Sprite
UML(Unified Modeling Language): Class Diagram
Type Casting, Upcasting & Downcasting
@Override的用法和意思
LibGDX: Scene2d & Graphical User Interface(GUI)
LibGDX: Splash Screen
LibGDX: Texture Packer
LibGDX: BitmapFonts, JSON & Skin
Android: R.java File
Android: onClick事件的5種實現方式
LibGDX: Game Menu Screen
LibGDX: Advanced Game Menu Screen (using Abstract Screen)
LibGDX: Disposable Interface
Java & LibGDX: super keyword
LibGDX: Advanced Game Menu Screen (using AssetManager)
Java: Array, Arrays, List, ArrayList & LibGDX: Array
LibGDX: File I/O (Preferences)
LibGDX: Game Level Selection Screen
LibGDX: Advanced Game Level Selection Screen (using AssetManager)
LibGDX - Tiled 2D Platform Game
LibGDX: Lifecylce (Render() Method)
LibGDX: Delta Time
LibGDX: Animation & Spritesheet
LibGDX: Keyboard, Mouse & Touch Screen Control
Input Control (Polling VS Event Driven Input)
LibGDX: Tiled (Background and Foreground)
LibGDX: Jumping Action
LibGDX: Tiled (Collision Detection)
LibGDX: Tiled (Bullet Class)
LibGDX: Audio (Sound & Music)
LibGDX: Tiled (Scrollable Background with Camera & HUD)
LibGDX: WorldController & WorldRenderer Class
LibGDX: Install & Setup Android Studio IDE
LibGDX: Use Android Studio to Run Java Hello World
LibGDX: Use Android Studio to Run LibGDX Hello World
Adobe Illustrator: Basic Components Part 1
Adobe Illustrator: Basic Components Part 2
Adobe Illustrator: BlackJack Table & Cards
LibGDX: Blackjack Animation
LibGDX: Interpolation
Java: toString() Method
Java: Blackjack Shuffle Methods
LibGDX: Blackjack Shuffle Method
Java: Blackjack Card Game
LibGDX - Others
Making and Displaying App Icon
LibGDX: Displaying Traditional and Simplified Chinese Characters
LibGDX: Handling Different Screen Resolutions
Unity Game Engine & C#
Visual Studio: C# Hello World
Unity: C# Hello World
Unity: Handling Different Screen Resolutions
Unity: Life Cycle
Unity: StartCoroutine, StopCoroutine, IEnumerator & Yield
Unity: Splash Screen
Unity: Fonts, Traditional and Simplified Chinese Characters
Unity: GameObject, Class Object, new & Instantiate
Unity: Start Screen with Glowing Animated Button
Unity: C# Get & Set Modifier
Unity: Delegates & Events
Unity: File I/O, Read & Write Text File & PlayerPrefs
Unity: Game Level Selection Screen
Unity: Game Menu Screen & ScreenManager
Unity: Encrypt and Decrypt Text File
Unity: Options Menu Screen
Unity: Convert Numbers Image to Custom Font
Unity: Blackjack Card Game - Part 1 (Full Game)
Unity: Blackjack Card Game - Part 2
Unity: Blackjack Card Game - Part 3
Unity: Blackjack Card Game - Part 4
Unity: Blackjack Card Game - Part 5
Unity: Blackjack Card Game - Part 6
Unity: Blackjack Card Game - Part 7
第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,如下圖:
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)連接起來,這樣做我們就可以把屏幕上的任何介面元件連接背後的程式,為介面元件作出控制,如下概念圖:
@+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變數時,則該組件會使用該變數的值作為標識。 如果不存在該變數,則添加一個新的變數,並為該變數增加相應的值(不會重複)。
首先在activity_main.xml建立一個TextView元件。
另外在activity_main.xml建立一個Button元件。
在Button屬性欄新增一個id為@+id/button1。
在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.id
和
id.button1
合併,就成為
R.id.button1
。R.id.button1就可以在Android的任何地方使用。
1- R.id.button1的由來。
首先在activity_main.xml建立一個TextView元件。
另外在activity_main.xml建立一個Button元件。
在Button屬性欄新增一個id為@+id/button1。
再把Button顯示的字串改為
"Click me"
。
在TextView屬性欄新增一個id為@+id/textView1。
開啟
gen/com.hkprogram.mydemo20/R.java
檔案。
R.java檔案內就會自動產生對應的資源識別碼public static final int
button1
=
0x7f09003f
;。
R.java檔案內就會自動產生對應的資源識別碼public static final int
textView1
=
0x7f090040
;。
系統提供
findViewByID()
方法,它可由id找到指定的元件,findViewByID()的語法如下:
findViewByID(R.id.識別名稱);
例如我們的TextView介面元件:
findViewByID(R.id.textView1);
在MainActivity.java內,我們就可以把activity_main.xml檔案的textView1介面元件與背後的Java程式MainActivity.java(
textView
)連接起來。