Android Tutorial Guess my number - Visual designer & Events

Please first follow the installation and configuration instructions in these tutorials:
Installing Basic4android and Android SDK
Hello world - Installing Android Emulator

In this tutorial we will use the designer to create the layout. The layout includes an EditText (TextBox) and a Button.
The user needs to guess a random number. The user enters the number in the EditText view (control) and presses on the button to submit the guess.
A "toast" message will appear, indicating to the user whether the number is larger or smaller than the chosen number.

- Create a new project and save it.
- Open the designer by choosing the Designer menu.

The designer is made of two main components. The "control panel" which contains all the available properties and options, and is part of the IDE:

gmn_designer.png


and the "visual" component which runs on a device or emulator:

gmn_emulator_designer.png



The visual component, as it names suggests, displays the layout. It also allows you to move and resize the views (controls).
Changing the layout in the visual component will also change the values stored in the control panel.

Note that all the data is stored in the control panel component. Therefore nothing bad will happen if the emulator crashes or is turned off.
You can connect to it again and the layout will appear.

The first step is to connect to the device. Press Tools - Connect.
This step takes several seconds. Note that the IDE will stay connected until the IDE closes. Closing the designer will not disconnect the connection.

Use the Add View menu to add a Button, an EditText and a Label.
Change the views Text property and position them similar to this:

gmn_layout1.png


Change the Activity Drawable property to GradientDrawable to achieve the gradient effect.

Tip: When working with a small monitor you may find it convenient to check the "Top Most" option (in the upper right corner). It will cause the control panel to stay on top and not be hidden by the emulator.

Save your layout, name it Layout1.

An important concept about layouts is that there is a complete separation between your code and the layouts.
The layout is saved as a file, with ".bal" extension. Each project can have any number of such files and unless you explicitly load a layout file, it will not have any effect on your application.

Once you have saved a layout, it is automatically added to the "File manager". You can see it under the "Files" tab in the IDE right pane.

We want to catch the button's click event.
Each view has an EventName value. It is a property in the Designer, and a parameter passed to the Initialize method when adding views programmatically.
In order to catch an event you should write a Sub with the following structure (it is simpler than it sounds):
Sub <EventName>_<Event> (event parameters).

In the designer, the EventName property is set by default to the view's name.
If we want to catch the Click event of a button with EventName value of Button1 we should write the following sub signature:
Sub Button1_Click

So here is the complete code:
B4X:
Sub Process_Globals
    
End Sub

Sub Globals
    Dim MyNumber As Int
    Dim EditText1 As EditText 'will hold a reference to the view added by the designer    
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout1") 'Load the layout file.
    MyNumber = Rnd(1, 100) 'Choose a random number between 1 to 99
End Sub

Sub Button1_Click
    If EditText1.Text > MyNumber Then
        ToastMessageShow("My number is smaller.", False)
    Else If EditText1.Text < MyNumber Then
        ToastMessageShow("My number is larger.", False)
    Else
        ToastMessageShow("Well done.", True)
    End If
    EditText1.SelectAll
End Sub
Some notes:
- Every activity module comes with an Activity object that you can use to access the activity.
- Activity.LoadLayout loads the layout file.
- There are other views that can load layout files. Like Panel and TabHost. For TabHost each tab page can be created by loading a layout file.
- In order to access a view that was added with the designer we need to declare it under Sub Globals.
- ToastMessageShow shows a short message that disappears after a short period.
Using a toast message in this case is not optimal as it may be unnoticed when the soft keyboard is open.


File is available here: http://www.b4x.com/android/files/tutorials/GuessMyNumber.zip
 

n8ptg

New Member
Licensed User
Longtime User
How to delete a control?

Sorry to ask a newbie question, but how do you delete a control in Designer? The delete key does not work in the emulator. In Designer, right clicking will bring up a Delete option but it only seems to delete the text in the control selector drop-down selector.

Also, what does "Generate Members" do in the Designer?
:confused:
 

CharlesR

Member
Licensed User
Longtime User
I am sorry to be a newbie but I have just downloaded B4A and am very impressed. I ran tutorial 1 fine, but now on Tutorial2 I get
"Compiling code. Error
Could not find file 'C:\Users\Charles\AppData\Local\Temp\Temp1_GuessMyNumber.zip\Guess My Number\Files\layout1.bal'.
What directory structure do you recommend and how do I configure that. Thanks
 

DazRacing

Member
Licensed User
Longtime User
Text colour...?

Hi,

Just purchased B4A and having a go with this Guess example, so go easy please ;)

When I add a button via Add View > Button and it appears on the emulator it's text appears in grey and not black as per your example OR as per the Text Color of my properties window... I'm confused?

I can't see any option to change this? The option that is Text Style > Text Color already states it's "Black", but it's not showing as Black in the emulator.

What am I missing...? :sign0085:
 

cmartins

Member
Licensed User
Longtime User
Activity.LoadLayout

erel,

In the 1st post you sad:

"Android destroys the old activity and creates a new activity each time the orientation changes. Therefore Activity.LoadLayout will be called again each time. Unfortunately the number will also be randomly chosen again each time. This can be easily fixed... But not in this tutorial."


I need this information. It will be very useful.


thanks
 

ssolid

Member
Licensed User
Longtime User
help

How to use the keyword "ToString"?give me a exmple.

Did b4a have keyword like "End" of VB.So I can end my all project.
 

askncan

New Member
I think i made something extreamly wrong :sign0161:

B4X:
Sub Process_Globals
   
End Sub

Sub Globals
    Dim MyNumber As Int
    Dim EditText1 As EditText 
End Sub

Sub Activity_Create(FirstTime As Boolean)
     Msgbox ("Welcome to guess my number!","") 
    Activity.LoadLayout("Layout1")
    MyNumber = Rnd(1,73 100) 
End Sub



Sub Button1_Click
    If EditText1.Text > MyNumber Then
        ToastMessageShow("My number is smaller.", False)
    Else If EditText1.Text < MyNumber Then
        ToastMessageShow("My number is larger.", False)
    Else
        ToastMessageShow("Well done.", True)
    End If
    EditText1.SelectAll
End Sub

:sign0163: :sign0085:
 

askncan

New Member
oh, good how will that line look?

my error is that when i press the "Guess!" button it dosent happen anything
 

clusker2

Member
Licensed User
Longtime User
Pasding FirstTime state

I am working with B4A trial and really like! I am working through this Guess My Number tutorial and added some of my own stuff to start getting used to it. The game works great the first time through. However, I think I am not correctly passing the "FirstTime" state back to Activity_Create Sub as it is going directly to the Else part of the statement, then errors out on the second time around after making my first guess. Can someone suggest any changes to get me past this? I am not much of a programmer... more of a hacker, so please be gentle! This is my first post, and I added my project via a .zip... I think. Thanks!
 

Attachments

  • GMN.zip
    8 KB · Views: 363

clusker2

Member
Licensed User
Longtime User
It works

Thanks Erel! I did go over the tutorial and also created a sub called "Reset" as you suggested and it worked perfectly! I appreciate the support!
 

DavidRGreen

New Member
Licensed User
Longtime User
Orientation variant issue

Day 1, starting with the tutorials, and I have been looking over the steps repeatedly, looking for something missed and cannot see it.

When attempting to create a variant for landscape, using ctrl+F11 rotates both the emulator skin but also the window within.

With the emulator skin controls (buttons) are oriented horizontally in landscape (as expected), but the emulator viewport is rotated as well, so the labels, input and button are sideways as well (left to right becomes bottom to top). The viewport also includes the notification bar which is also rotated 90° CCW.

Even the sample for download displays the same way.

Any suggestions as to what could possibly be going wrong here would be appreciated.
 
Top