In the Eclipse package explorer (Alt+Shift+Q, P), navigate to TMDice, res, layout in the tree. In there, you have
activity_main.xml
. An activity is basically a screen, or an action your app can take. According to developer.android.com, An activity is a single, focused thing that the user can do. Almost all activities interact with the user, so the Activity class takes care of creating a window for you in which you can place your UI...Sounds like a VB6 form to me. You can spawn additional activities, but we shouldn't need that.
You should have a wysiwyg editor up now with what looks like an android screen. The size and such will depend on what device you are set up for. In my case, I have a galaxy tab 2 10.1, so in the dropdown at the top (which currently says "Nexus One" on my setup) I select Generic and 10.1" WXGA (Tablet). I leave the orientation button (the one next to the screen selection) alone for now, since my VB6 dice roller generally runs up and down, not left to right. Then I click the "Hello World" text in the middle of the screen and delete it with the "Delete" keyboard key.
From the palette at the left, under "Form Widgets", I drag "Large" onto the screen to the top left. I align it with the left and top of the screen, and the change the text in the properties window that pops up on the right to "Enter Die Roll (% for percentile dice)". I then go to "Text Fields" in the palette and drag "abc" (tooltip says Plain Text) over to the layout, lining it up with the left edge, and just below our prompt label. I use the sizing handles on it to stretch it all the way to the right of the screen. Then, back under "Form Widgets", I drag "Button" and line it up with the left edge right below the textbox, and change it's text in properties to "Evaluate". I add another Large textview (everything in the UI is a view, and I believe that technically, our entire layout is a composite view, or something like that) for the "Total" label, and a "Plain Text" textbox for the total. For the total textbox, I set the "Enabled" property to false. I haven't found a "Locked" or "Readonly" property, but I may eventually.
If you click "Run", you should get an emulator loaded and it should start the app with your screen. I created a device called "GalaxyTab2", using Google APIs, Platform 4.0, API level 14, and an ARM processor. You set up whatever device you are trying to test with (and hopefully it is one that is already provided so you don't have to customize everything. It actually looks like I installed a "Galaxy Tab" add on, so maybe that created the device for me).
However, I have something screwed up and my emulator never actually started completely. So I plugged in my actual GalaxyTab. I then went to "Debug Configurations..." on the "Run" menu. On the "Target" tab, I selected "Always prompt to pick device". Then when I ran the project, it prompted me to choose either a running android device or a virtual device. I chose my tablet (the only running device) and the application started up on that.
Now, in Package Explorer, go to TMDice/src/com.hfcsphotography.tmdice/MainActivity.java and double-click it. That will open the code window. MainActivity can be considered to be your application class. It isn't really a form class, as that is a view we haven't had to access yet. It's more like the "Program" class you get created in a new C# application. Anyway, at the top of this class, right below the declaration, we are going to add a TAG constant. This is suggested as a best practice by the android developer reference when using the logging methods.
public class MainActivity extends Activity {
public final static String TAG = "TMDice";
...
This is how you define a constant in java. "final" tells the compiler that nothing can change it. "static" simply tells it that there is only one copy of the TAG variable, regardless of how many instances of MainActivity get created (instead of a new copy of TAG getting created for each one). It could be private at this point, but we may want to use it somewhere else in the future, so we might as well make it public now. Although I'm not trying to make this into a Java tutorial, if you haven't used it before note that types come before the name, all statements end in a semicolon, and blocks are contained in curly braces instead of VB's "If/End If" style block constructor. "extends" is the equivalent of VB's "Inherits" keyword, and isn't a separate statement, as it is in VB (so no semicolon separator).
Finally, at the bottom of MainActivity, we are going to create button1_click. View click handlers must be public, have a void return value (this is the equivalent of a Sub in VB6) and only have a single parameter of type View. For now, I am just going to log a message using the Log.d routine (Log.d logs a debug message, Log.v logs a verbose message, etc.)
...
public void button1_click(View v) {
Log.d(TAG, "Button1 Clicked");
}
}
Run the app, click the "Evaluate" button, and you should find the "Button1 Clicked" message in the LogCat window. You can select the built-in filter "com.hfcsphotography.tmdice" to see all messages your app is generating, and you can enter "tag:TMDice" in the textbox above the log list to filter to only the messages we have programmed the app to output.
For now, that's enough. This may be enough to get many of you well on your way to finishing the app. In my next android post, I'll start adding useful code to the button, which will mean referencing the textbox to pull the users dice calculation, rolling the dice, and updating the total value.
No comments:
Post a Comment