![]() | ![]() | ![]() | Dialogs |
We already met the toast, which displays a (short) message temporarily. There are three other methods that display dialogs similar to the ones described earlier:
However, unlike the cs109ui package, these methods do not wait for the user interaction to finish: On Android, the method will return immediately. To handle the user's response, you need to provide a function object that receives the response as an argument (for askYesNo, this is a Boolean, for inputString this is a String).
The example code shows how this should be used (dialogs.kt):
//
// Different dialogs
//
import org.otfried.cs109.Context
import org.otfried.cs109.MiniApp
import org.otfried.cs109.Canvas
import org.otfried.cs109.Color
import org.otfried.cs109.DrawStyle
import org.otfried.cs109.TextAlign
class Main(val ctx: Context) : MiniApp {
init {
ctx.setTitle("Dialog demo")
ctx.onTap { x, y -> tapped(x, y) }
}
fun tapped(x: Double, y: Double) {
if (y < 100)
ctx.toast("This is a toast!")
else if (y < 200)
ctx.showMessage("This is a message. I can tell you a lot!")
else if (y < 300)
ctx.askYesNo("This is a question. Do you know the answer?") {
answer -> if (answer) ctx.toast("Good!") }
else
ctx.inputString("Tell me your name!") {
s -> ctx.setTitle("Hello $s") }
}
override fun onDraw(canvas: Canvas) {
val x = canvas.width / 2.0
canvas.clear(Color(255, 255, 192))
canvas.setColor(Color.BLUE)
canvas.setFont(32.0)
canvas.drawText("Toast", x, 50.0, TextAlign.CENTER)
canvas.drawText("Message", x, 150.0, TextAlign.CENTER)
canvas.drawText("Yes or No", x, 250.0, TextAlign.CENTER)
canvas.drawText("Name", x, 350.0, TextAlign.CENTER)
}
}
![]() | ![]() | ![]() | Dialogs |