Spanish Action Overflow

tomky

Active Member
Licensed User
Hola.
Estamos utilizando una AppCompat ActionBar.
Nuestra duda es con su Action Overflow. (Botón de los puntitos)

Sabemos que con los siguientes subs controlamos sus ítems seleccionados:
B4X:
Sub ActionBar_MenuItemClick (item As ACMenuItem)
    Log("ActionBar_MenuItemClick event fired, id:" & item.Id)
End Sub


Sub Menu_Click
    Log("MenuItem " & Sender & " selected")
End Sub

¿Pero como controlamos ese botón en sí, el evento de haber cliqueado en los puntitos para que además de abrirse su menú podamos ocultar otras vistas?
¿Qué nombre tiene ese evento?

Gracias.
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Para llamarlo emplea :
B4X:
Activity.OpenMenu

El problema será que si tu dispositivo movil tiene botón de menu "hard" no te saldrá, entonces lo que puedes hacer es añadir un botón normal con Activity.AddMenuItem3 , puedes detectar si existe el boton hard asi:

B4X:
log("Existe Boton Menu Hard? " & ExisteBotonMenuHard)



Sub ExisteBotonMenuHard As Boolean
  Dim vc As JavaObject
  vc = vc.InitializeStatic("android.view.ViewConfiguration").RunMethod("get", Array(GetContext))
  Return vc.RunMethod("hasPermanentMenuKey", Null)
End Sub

Sub GetContext As JavaObject
  Return GetBA.GetField("context")
End Sub

Sub GetBA As JavaObject
  Dim jo As JavaObject
  Dim cls As String = Me
  cls = cls.SubString("class ".Length)
  jo.InitializeStatic(cls)
  Return jo.GetFieldJO("processBA")
End Sub

Saludos
 

tomky

Active Member
Licensed User
Gracias bgsoft.
Quizás me expliqué mal.
No quiero que el botón de los puntitos abra automáticamente su menú, sino que a través del click sobre él (su evento click), poder ocultar un panel, por ejemplo, a la vez. U ocultar el teclado.
 

rscheel

Well-Known Member
Licensed User
Longtime User
Gracias bgsoft.
Quizás me expliqué mal.
No quiero que el botón de los puntitos abra automáticamente su menú, sino que a través del click sobre él (su evento click), poder ocultar un panel, por ejemplo, a la vez. U ocultar el teclado.

Colocando

B4X:
panel2.Visible = False
 

tomky

Active Member
Licensed User
Gracias rscheel.
¿Pero como le digo que lo haga al clicar en el botón de los puntitos, sin tener que seleccionar ningún ítem de su menú posterior?
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Ese boton de los tres puntitos corresponde al boton "home", y no hay un evento específico (que yo sepa) para detectar cuando lo pulsan, la única forma seria asi:

B4X:
Sub Activity_KeyPress (KeyCode As Int) As Boolean 'Return True to consume the event
 
   If KeyCode =  KeyCodes.KEYCODE_MENU
        panel2.Visible = False
        Return True
   End If
End Sub

El problema es que si el dispositivo movil no lleva el botón home por hard, no lo podrás detectar.
Tienes dos opciones, o lo creas añadiendo un icono de tres puntos con la opción:

B4X:
  Activity.AddMenuItem3("", "TresPuntos", LoadBitmap(File.DirAssets, "TresPuntos.png"), True)

O dejas de emplear ese sistema, y creas tu toda la barra de menú con un panel e incrustando el texto y la imagen con los tres puntos (es bastante facil).

Saludos
 
Last edited:

tomky

Active Member
Licensed User
Hola bgsoft.
El primer código que pones no funciona ni en el emulador.
Del segundo no sé cómo hacer que pendan de él los ítems.
Y del tercero me fastidiaría el MSMaterialdrawer que pende de mi Actionbar.
Gracias.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

El primer código que pones no funciona ni en el emulador.
No se a cual te refieres, todos los códigos que te he puesto estan probados por mi y funcionan en dispositivos móviles, nunca pruebo en emulador.


Del segundo no sé cómo hacer que pendan de él los ítems.
B4X:
Activity.AddMenuItem(Nombre Item,Nombre Evento)

Saludos
 

tomky

Active Member
Licensed User
Gracias bgsoft.
El primer código me refería al que trabaja con KeyCodes.KEYCODE_MENU. Lo probaré con el móvil, a ver.
¿Con los otros sistemas, como detecta el evento click?
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Gracias bgsoft.
El primer código me refería al que trabaja con KeyCodes.KEYCODE_MENU. Lo probaré con el móvil, a ver.
¿Con los otros sistemas, como detecta el evento click?

Hola tomky:

En el ejemplo este:
B4X:
Activity.AddMenuItem3("", "TresPuntos", LoadBitmap(File.DirAssets, "TresPuntos.png"), True)

Simplemente crea un sub con el nombre del evento "TresPuntos":

B4X:
Sub TresPuntos_Click

End Sub

Saludos
 
Top