Spanish Dudas sobre la librería MSMaterialDrawer

tomky

Active Member
Licensed User
Hola.
Estamos trabajando con la librería MSMaterialDrawer, para tener un menú desplegable.

Pero quisiéramos saber si es posible escribir su código fuera del Main, en un módulo de código por ejemplo, pero que respondiera a los eventos.

¿Es posible también cambiar su tamaño de fuente o su color de fondo?

¿Y utilizar imágenes diferentes según el diferente tamaño de pantalla?

Gracias
 

rscheel

Well-Known Member
Licensed User
Deberías ocupar la nueva versión de la librería desing support que es mas fácil de implementar y de usar.
 

tomky

Active Member
Licensed User
Gracias rscheel, pero de momento continuamos con esta librería.
Pero analizaremos la que dices.
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Hola Tomky

"Normalmente" algunos objetos que puedes definir un evento acepta un modulo de código o de servicio, estas cosas lo mejor es probarlo y asi sabes si funciona o no. Cuando sea fuera de un formulario y te exija objeto donde estas, pasale como argumento Me , si no te funciona pasale el nombre del módulo . A veces lo que si puedes hacer es escribir el código del evento por ejemplo en Main desde el módulo de código, se que te puede parecer una tonteria pero a veces buscas una necesidad asi. Otra opción seria hacerlo en main, y desde el evento de main llamar a un sub donde le pases los datos de ese evento, seria como crear un evento del evento.

Quizas para entender mejor lo que te digo, mira el post de Erel de CameraEx class, donde hay transferencias de datos entre el módulo de clase y el main y al revés.
https://www.b4x.com/android/forum/threads/class-cameraex-extends-the-camera-library-functionality.23801/#content

Saludos
 

rscheel

Well-Known Member
Licensed User
Gracias rscheel, pero de momento continuamos con esta librería.
Pero analizaremos la que dices.
Estimado se lo decía por que es la opción mas viable ya que tiene soporte completo, y otra cosa la librería de material drawer que esta usando tiene varios problemas que nunca se corrigieron y la librería dejo de actualizarse mientras tanto DesingSupport es su mejor opción.

https://www.b4x.com/android/forum/threads/designsupport-additional-material-design-components.58893/

Por que es su mejor opción?

-Es del creador de appCompat @corwin42 , aparate la librería designSupport tiene muchas cosas buena las cuales le serian de mucha utilidad en su aplicación.

Bueno ojala le sirva mi consejo.
 

tomky

Active Member
Licensed User
Hola.
Gracias bgsoft.
De momento vemos complicado eso.

Gracias rscheel, pero el mismo corwin42 "recomienda" esta libreria.
Además, su ViewPager no soporta ScrollView.

Saludos
 

rscheel

Well-Known Member
Licensed User
Hola.
Gracias bgsoft.
De momento vemos complicado eso.

Gracias rscheel, pero el mismo corwin42 "recomienda" esta libreria.
Además, su ViewPager no soporta ScrollView.

Saludos
Es extraño que digas que no soporta scrollview, déjame decirte que si soporta, ya que yo lo utilizo, por eso te lo estoy recomendando de otra forma no lo aria, pero bueno es tu app.

Saludos.
 

tomky

Active Member
Licensed User
Hola rscheel.
Me refiero al scroll vertical.
Quizás haya entendido mal esto
https://www.b4x.com/android/forum/threads/ahviewpager-library-sliding-panels-now-perfect.14165/page-6#post-126780

He intentado hacerlo en el activity create

B4X:
    'Initialize a PageContainer Object with 10 pages. Each page contains a panel with different color
    PC.Initialize

    For i = 0 To 9
        Dim p As Panel
    
        p.Initialize("") 
        p.Color = Colors.Transparent

    
        sv.Initialize2(100%y,"sv")
        sv.Color = Colors.Transparent

        p.AddView(sv,0,0,100%x,100%y)
    
        PC.AddPage(p, "Page " & i)

    Next

    'Set the PageContainer for the ViewPager
    VP.PageContainer = PC

    'Set colors. The indicator color defaults to "colorAccent"
    Dim ac As AppCompat
    TabLayout.Color = ac.GetThemeAttribute("colorPrimary")

    'Connect the TabLayout with the Viewpager. This will keep tabs and pages
    'in sync and creates a nice indicator animation.
    TabLayout.SetViewPager(VP)
y ese panel no muestra el ScrollView y su contenido asociado.
 

bgsoft

Well-Known Member
Licensed User
Hola Tomky

Antes de nada decirte que si Rscheel te dice que el scrollview funciona por que lo ha probado, creetelo, es uno de los miembros del foro con mas experiencia, y si se habla de ScrollView es el vertical, el horizontal es HorizontalScrollView, así que pienso que te hablaba del vertical.

Hay partes del código que no veo, asi que no puedo opinar sobre ella, pero en lo que has escrito hay problemas que hacen que no funcione como tu quieres, te escribo comentarios sobre tu propio código:

B4X:
For i = 0 To 9
        Dim p As Panel
        p.Initialize("")
        p.Color = Colors.Transparent



        ' como no declaras aqui tu ScrollView lo único que haces es reiniciarlo cada vez,
        ' pero no creas 10, tendrias que poner esto:
        Dim sv as ScrollView  ' lo tendras que quitar del global o llámalo diferente

        sv.Initialize2(100%y,"sv")
        sv.Color = Colors.Transparent

        p.AddView(sv,0,0,100%x,100%y)

        PC.AddPage(p, "Page " & i)

    Next
Ya te he dicho que no veo el resto de código, pero si tanto al Scroll como al panel le pones color transparente, lo que luego incrustes en el scroll el fondo será transparente, te recomiendo que para las pruebas pongas colores sólidos y diferentes y así veras si aparece un objeto o no.

Saludos
 
Last edited:

tomky

Active Member
Licensed User
Hola bgsoft.
No es que quiera contradecir a rscheel, ya sé que sabe mucho.
Lo que pasa es que el tema es complejo, a mi entender.

Pues lo que queremos hacer es poner en cada panel del AHViewPager un scroll que contiene un conjunto de paneles expandibles creados dinámicamente y que reciben su contenido de una base de datos.
Utiliza la clase ExpandablePanels.

Adjuntamos el código por si lo queréis mirar.
Saludos.
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Hola bgsoft.
No es que quiera contradecir a rscheel, ya sé que sabe mucho.
Lo que pasa es que el tema es complejo, a mi entender.

Pues lo que queremos hacer es poner en cada panel del AHViewPager un scroll que contiene un conjunto de paneles expandibles creados dinámicamente y que reciben su contenido de una base de datos.
Utiliza la clase ExpandablePanels.

Adjuntamos el código por si lo queréis mirar.
Saludos.
Hola Tomky

Ya se que no quieres contradecir a rscheel, lo que te decia es que si el te dice que lo ha probado y funciona, que lo creyeras.

Las cosas complejas hay que dividirlas en tareas concretas una a una para que al final sean fáciles, si lo planteas como "un todo" te parecerá complejo, pero ve haciendo cosas por bloques y veras que al final se van resolviendo, y cuando tengas una duda, pues aqui en el foro hay mucha gente que te ayudará. Lo único, es que no intentes plantear todas las dudas en un post totalmente genérico, si no haciendo preguntas concretas, te lo digo por que así tendras mas oportunidades que la gente conteste a tus dudas concretas a que vea dentro de un post algo que no tiene nada que ver.

Yo empezaria a resolver el problema de visión de esos scroll, que es lo que te he dicho por lo que no los ves, luego cuando lo resuelvas, meteles datos a mano para ver como se comporta, y luego ya empezarás a cogerlos de la base de datos. Tambien podria ser interesante de que no crees tantos, si no uno, y cuando veas que hace lo que tu quieres ya podras crear todos. Te lo digo por que si lo quieres llevar todo a la vez, y no tienes experiencia en alguna de las cosas que vas a hacer, cuando tengas un error o no salga como tu quieres no sabras si el problema viene de algun objeto, de la lectura de la base de datos o de cualquier otra cosa.

Saludos
 

tomky

Active Member
Licensed User
Hola bgsoft.
Vale, tomo nota.
Estoy intentando precisamente juntar 2 modulos, y solamente me muestra el contenido de ese scrollview cuando añado el scrollview a la activity, y no al panel del AHViewPager.
¿Cómo lo resuelvo?

¿Cómo subo un zip a este hilo?, por si lo queréis hojear.

Gracias.
 

rscheel

Well-Known Member
Licensed User
Hola bgsoft.
Vale, tomo nota.
Estoy intentando precisamente juntar 2 modulos, y solamente me muestra el contenido de ese scrollview cuando añado el scrollview a la activity, y no al panel del AHViewPager.
¿Cómo lo resuelvo?

¿Cómo subo un zip a este hilo?, por si lo queréis hojear.

Gracias.
Un ejemplo

B4X:
PC.Initialize
    Panel1.Initialize("Panel1") 
    'Panel1.AddView(ListView1, 0dip, 0dip,100%x, 83%y)
    Panel1.Color = Colors.Red
    ScrollView1.Initialize(600dip)
    'Activity.AddView(ScrollView1, 0, 0, 100%x, 100%y)
    ScrollView1.Panel.AddView(Panel1, 0, 0, 100%x, 600dip)
    PC.AddPage(ScrollView1, "Prueba1")

    Panel2.Initialize("Panel2")                     
    'Panel2.AddView(ListView2, 0dip, 0dip,100%x, 83%y)
    Panel2.Color = Colors.Blue'Colors.RGB(Rnd(0,256), Rnd(0,256), Rnd(0,256))
    ScrollView2.Initialize(600dip)
    'Activity.AddView(ScrollView1, 0, 0, 100%x, 100%y)
    ScrollView2.Panel.AddView(Panel2, 0, 0, 100%x, 600dip)
    PC.AddPage(ScrollView2, "Prueba2")

    VP.PageContainer = PC
    Dim Ac As AppCompat
    TabLayout.Color = Ac.GetThemeAttribute("colorPrimary")
    TabLayout.SetViewPager(VP)
Espero te sirva.
 

tomky

Active Member
Licensed User
¿Y si la creación de los paneles la intento hacer dinámica, como el código que puse anteriormente?
Y que todos los ScrollViews se comporten igual.
Gracias.
 

rscheel

Well-Known Member
Licensed User
¿Y si la creación de los paneles la intento hacer dinámica, como el código que puse anteriormente?
Y que todos los ScrollViews se comporten igual.
Gracias.
Si se puede en ese caso solo debes usar un scrollview y un panel.

Va a depender mucho de como quieras cargar los datos y que datos quieras cargar, si no te manejas mucho con el scrollview te recomiendo que uses un listview.

Prueba haber si puedes instalar esta aplicación, para ver si necesitas algo como eso

https://play.google.com/store/apps/details?id=com.encuentra.dondeir
 

tomky

Active Member
Licensed User
Hola.
Desgraciadamente no puedo instalar esa aplicación por mi situación geográfica.
Pero no queremos utilizar en un principio un listview, sino una vista en acordeón que nos proporciona la clase ExpandablePanels.

¡Con el código de bgsoft funciona! :)
Pero ahora al intentar hacerlo dinámico, tengo problemas al pasar el scrollview por parámetro a los sub de la clase ExpandablePanels que lo utilizan. O bien es por su declaración.
Pues queremos mostrar 10 resultados de la base de datos por panel. Y no sabemos cuántos paneles necesitaremos.

Además, tenía el código puesto al revés. o_O
Ésto:
B4X:
 p.AddView(sv,0,0,100%x,100%y) 
PC.AddPage(p, "Page " & i)
en lugar de lo correcto:
B4X:
 ScrollView1.Panel.AddView(Panel1, 0, 0, 100%x, 600dip)
PC.AddPage(ScrollView1, "Prueba1")
Gracias.
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Hola Tomky

Me alegro que te empiece a funcionar el código

Pero ahora al intentar hacerlo dinámico, tengo problemas al pasar el scrollview por parámetro a los sub de la clase ExpandablePanels que lo utilizan. O bien es por su declaración.
Escribe el código de como lo haces y miramos donde puede estar el problema


Pues queremos mostrar 10 resultados de la base de datos por panel. Y no sabemos cuántos paneles necesitaremos.
Lee primero los registros totales que contiene la base de datos, despúes dividelo por 10 (los que vas a poner por panel) y te saldrá el número de paneles que necesitas, si hay decimales sumale uno.
Lo de leer la cantidad de registros de la base de datos puedes hacerlo al iniciar la aplicación y guardarte el total de registros en una variable global (TotalRegistros = dbtable.GetRowCount) Luego si modificas la base de datos actualizas esa variable.

Saludos
 

tomky

Active Member
Licensed User
Hola bgsoft.
Estamos en ello.

La mayor complicación que tenemos es cómo pasarle el scrollview en cuestión de cada panel en concreto del AHViewPager al sub de la clase ExpandablePanels:
B4X:
'This is the more important part of the sample
'It will move the surrounding views when it is expanded and collapses
'It is imperative to use the same sub name : "eventname & Resize_Views"
Sub expPnls_Resize_Views
    For i = 0 To pnls.Length-1 -1
        pnls(i+1).Top = pnls(i).Top+pnls(i).Height + 3dip
    Next
    sv.Panel.Height = pnls(pnls.Length-1).Top + pnls(pnls.Length-1).Height
End Sub
Pues es un evento.

Si, ya sabíamos lo del total de registros.

Gracias.
 
Last edited:
Top