Spanish Como cambiar los colores de los botones de un B4XDialog

Juan edwin

Member
Saludos
Quisiera cambiar los botones de los B4XDialog tanto en show como custom, no he podido resolverlo necesito su ayuda por favor aunque no es necesario quisiera conservar todo con el color de la aplicacion..... he copiado un pequeño ejemplo de un tema aquí en el foro pero resulta que si lo hace pero luego de ciertas cosas que cambian en el código de otra parte de otro código que no tiene nada que hacer con lo del dialog pero resulta que hay error, porque
Pienso que es el hecho de enviar un B4XView a un receptor button . segun el codigo de aqui, el siguiente codigo

B4X:
cs.Initialize.Color(Colors.RGB(220,220,220)).Alignment("ALIGN_NORMAL").Append(" Lista de reproducción tiene canciones").PopAll
diálogo.Título=cs
Wait For (dialog.Show("¡Hay canciones en la lista de reproducción!"&Chr(10) _
&"¿Desea borrarlos o mantenerlos?.","Mantenerlos","Borrarlos","")) Complete (Result As Int)

ponerstateListButtonDialog(diálogo.GetButton(xui.DialogResponse_Positive))
ponerstateListButtonDialog(diálogo.GetButton(xui.DialogResponse_Negative))
                    ...

                    
Sub ponerstateListButtonDialog(v Como botón)
    ' Define dos colores de degradado para el estado Habilitado
    Dim c1 como Int=Colores.RGB(30,30,30)
    Dim c2 como Int=Colores.RGB(90,90,90)
    Dim colsEnabled(2) como entero
    colsHabilitado(0) = c1
    colsHabilitado(1) = c2
    ' Definir un GradientDrawable para el estado Habilitado
    Atenuar gdwEnabled como GradientDrawable
    gdwEnabled.Initialize("INFERIOR_SUPERIOR",colsEnabled)
    gdwEnabled.CornerRadius = 5
    ' Define dos colores de degradado para el estado presionado
    Dim colsPressed(2) como entero
    colsPressed(0) = c2
    colsPressed(1) = c1
    ' Define un GradientDrawable para el estado presionado
    Dim gdwPressed como gradiente dibujable
    gdwPressed.Initialize("INFERIOR_SUPERIOR",colsPressed)
    gdwPressed.CornerRadius = 5
    ' Definir un StateListDrawable
    Dim stdGradient como StateListDrawable
    stdGradient.Inicializar
    Estados tenues (2) como Int
    estados(0) = stdGradient.estado_habilitado
    estados(1) = -stdGradient.state_pressed
    stdGradient.addState2(estados, gdwEnabled)
    Estados tenues (1) como Int
    estados(0) = stdGradient.estado_presionado
    stdGradient.addState2(estados, gdwPressed)
    ' Establecer stdRedGradient en el fondo del botón
    v.Fondo = stdGradient
End Sub
 

Juan edwin

Member
gracias, muchas gracias eso es lo que estaba buscando hace pocos dias lo vi y ahora quise volver a verlos pero no podia encontrarlo, te lo agradezco mucho.
Creo que no hay lo que estoy buscando lo de los botones. aqui en mi proyecto aparece este error y creo que es que el "diálogo.GetButton(xui.DialogResponse_Positive) " retorna un B4XView y sub "ponerstateListButtonDialog" que uso tiene como parametro un button aqui mi codigo de error
B4X:
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create (first time) **
Write permission allowed
Call B4XPages.GetManager.LogEvents = True to enable logging B4XPages events.
** Activity (main) Resume **
Fore - cuando pasa al primer plano
aaaaaaaaaaaaaaaaa
Error occurred on line: 220 (B4XDialog)
java.lang.ClassCastException: android.widget.TextView cannot be cast to android.widget.Button
    at b4a.example.b4xmainpage$ResumableSub_btnListaBoton_Click.resume(b4xmainpage.java:3007)
    at anywheresoftware.b4a.shell.DebugResumableSub$DelegatableResumableSub.resumeAsUserSub(DebugResumableSub.java:48)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:351)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:157)
    at anywheresoftware.b4a.BA.raiseEvent(BA.java:201)
    at anywheresoftware.b4a.shell.DebugResumableSub$DelegatableResumableSub.resume(DebugResumableSub.java:43)
    at anywheresoftware.b4a.keywords.Common$14.run(Common.java:1801)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
** Activity (main) Pause event (activity is not paused). **
** Service (starter) Destroy (ignored)**
 

Juan edwin

Member
Gracias al menos ya pude hacerlo funcionar hasta el momento esta bien corre sin problemas, gracias a un ejemplo de cambiar la posicion del boton cancelar en la barra de titulo, ahi se ve el uso de ResumableSub, aqui muestro como lo puse

B4X:
Dim rs As ResumableSub
rs=dialog.Show("Desea agregarla a la actual lista de reproduccion?"&Chr(10) _
&"= " & lblBarraEstado.Text,"Si","No","")
ponerstateListButtonDialog(dialog.GetButton(xui.DialogResponse_Positive))
ponerstateListButtonDialog(dialog.GetButton(xui.DialogResponse_Negative))
Wait For (rs) Complete (Result As Int)
If Result =xui.DialogResponse_Negative Then
....
 
Top