Italian url in edit text

Luigi S

Active Member
Licensed User
Ho un edit text in cui scrivo appunti vari tra cui anche a volte qualche url a siti web che poi salvo su un db.
Leggendo il forum non mi sono fatto una idea chiara, su come ottenere lo stesso url cliccabile quando vado a rileggere la edit text dal db. Sono in confusione...

Saluti!
 

drgottjr

Expert
Licensed User
Longtime User
e' meglio usare una "label"


B4X:
    ....
    Activity.LoadLayout("layout")
    webview1.Color = Colors.Yellow
    webview1.Zoom(False)
    
    Dim cs As CSBuilder
    cs.Initialize.Size(22).Alignment("ALIGN_CENTER").append("Ti aspettiamo! ").append(CRLF).Append(CreateClickableWord("https://www.b4x.com")).PopAll
    label1.Text = cs
    cs.EnableClickEvents(label1)
End Sub

Sub CreateClickableWord(Text As String) As CSBuilder
    Dim cs As CSBuilder
    Return cs.Initialize.Underline.Color(0xFF00D0FF).Clickable("word", Text).Append(Text).PopAll
End Sub

Sub Word_Click (Tag As Object)
    webview1.LoadUrl(Tag)
End Sub

secondo @Erel: https://www.b4x.com/android/forum/threads/charsequence-csbuilder-tutorial.76226/#content
 

Attachments

  • luigi1.png
    luigi1.png
    6.9 KB · Views: 117
  • luigi2.png
    luigi2.png
    17.9 KB · Views: 110

Luigi S

Active Member
Licensed User
La label per me non credo vada bene perchè è l'utente della app (io solamente :)) che deve inserire la url memorizzandola nel db con una edit text, che alla bisogna richiamo leggo ed eventualmente modifico. Vorrei capire se esiste un modo per rendere questa url, alla successiva rilettura dal dal db sempre tramite edit text, cliccabile ed aprisse il browser di default. Spero di essere stato chiaro.
 

Sagenut

Expert
Licensed User
Longtime User
Tieni premuto sulla EditText per aprire l'URL.
 

Attachments

  • EditText_URL.zip
    14 KB · Views: 119

drgottjr

Expert
Licensed User
Longtime User
non importa da dove tirai la url (dalla db o a mano), la unica maniera di farla cliccabile e
tramite csbuilder. prendi la url e farla cliccabille con csbuilder. ho mostrato come si fa.
csbuilder. prendi qualsiasi variable e costruisci una csbuilder intorno. una volta cliccabile,
fai clicca. anche puoi lanciare un browser mediante un boton o al tocare il tasto di invio, ma
questi non sono "cliccabili" nel senso di un collegamento cliccabile. o vuoi cliccabile o vuoi
una altra cosa.
 

Sagenut

Expert
Licensed User
Longtime User
non importa da dove tirai la url (dalla db o a mano), la unica maniera di farla cliccabile e
tramite csbuilder. prendi la url e farla cliccabille con csbuilder. ho mostrato come si fa.
csbuilder. prendi qualsiasi variable e costruisci una csbuilder intorno. una volta cliccabile,
fai clicca. anche puoi lanciare un browser mediante un boton o al tocare il tasto di invio, ma
questi non sono "cliccabili" nel senso di un collegamento cliccabile. o vuoi cliccabile o vuoi
una altra cosa.
Hai ragione, ma forse @Luigi S non ha voluto dilungare troppo la domanda e il significato era interpretabile.
La tua soluzione è, giustamente, un modo per ottenere qualcosa di effettivamente cliccabile.
Quando poi ha detto che vuole utilizzare solo l'EditText allora ho postato la mia idea di soluzione.
Che non è un semplice Click ma forse potrebbe avvicinarsi a quello che può servirgli.
Perchè inizialmente anche io avevo pensato subito al CSBuilder per generare un Link in una Label. :)
 

Xfood

Expert
Licensed User
io credo che nella sua edittex ci possa essere scritto qualcosa del genere,

il mio sito e' www.libero.it, il sito migliore per programmare e' www.b4x.com,
se ti serve un buon antivirus vai su www.norton.com

quindi lui vorrebbe che tutti i link siano cliccabili, non sa a priori dove sara' la stringa che vuole
rendere cliccabile, ( come in questo post appena scritto)
a questo punto come si fa?
 

Sagenut

Expert
Licensed User
Longtime User
io credo che nella sua edittex ci possa essere scritto qualcosa del genere,

il mio sito e' www.libero.it, il sito migliore per programmare e' www.b4x.com,
se ti serve un buon antivirus vai su www.norton.com

quindi lui vorrebbe che tutti i link siano cliccabili, non sa a priori dove sara' la stringa che vuole
rendere cliccabile, ( come in questo post appena scritto)
a questo punto come si fa?
Si fà che l'EditText dovrebbe essere usata per aggiungere record al DB, e in fase di lettura dovresti mettere il record in una Label e usare il CSBuilder come detto da @drgottjr
Poi ci potrebbero essere anche altre soluzioni, ma senza sapere come e cosa deve fare l'app sono solo supposizioni. ;)
 

Xfood

Expert
Licensed User
Si fà che l'EditText dovrebbe essere usata per aggiungere record al DB, e in fase di lettura dovresti mettere il record in una Label e usare il CSBuilder come detto da @drgottjr
Poi ci potrebbero essere anche altre soluzioni, ma senza sapere come e cosa deve fare l'app sono solo supposizioni. ;)
quindi estrarre dalla stringa come nell'esempio appena postasto (#7) tutti i possibili link,
e generare dentro la stessa label i 3 link... ( come si vede nel post #7 ?)
una cosa del genere avevo cercato anche io ma non ho trovato soluzione,
magari aspetto la soluzione qui.

p.s. hocercato la soluzione, ma non ho aperto un tread
 

Luigi S

Active Member
Licensed User
Si @Xfood grazie, hai centrato la mia idea e l'hai espressa come io non ho saputo fare...
@Sagenut grazie anche a te per le risposte, e (se ho capito bene) dici che per ogni url presente nella editetxt devo aggiungere un record nel db, ma questo non mi complica le cose, visto che in ogni record ci sono altri campi? Le alternative quali sono?
 

Sagenut

Expert
Licensed User
Longtime User
Soluzione buttata giù in fretta.
Brutta e da sistemare ma può essere un punto di inizio.
Gira e rigira la soluzione giusta era subito quella di @drgottjr .
 

Attachments

  • EditText_URL_Clickable.zip
    14.4 KB · Views: 118
Last edited:

Sagenut

Expert
Licensed User
Longtime User
Si @Xfood grazie, hai centrato la mia idea e l'hai espressa come io non ho saputo fare...
@Sagenut grazie anche a te per le risposte, e (se ho capito bene) dici che per ogni url presente nella editetxt devo aggiungere un record nel db, ma questo non mi complica le cose, visto che in ogni record ci sono altri campi? Le alternative quali sono?
Avevo capito male io.
Pensavo che nel DB/EditText scrivevi solo un URL come contenuto di ogni record.
 

Luigi S

Active Member
Licensed User
@Sagenut Beato te che la vedi brutta e da sistemare, io non avrei saputo farla e faccio pure fatica a capirla!
Comunque fa quello che mi serve, nei prossimi giorni la implemento.
Grazie!
 

Sagenut

Expert
Licensed User
Longtime User
@Sagenut Beato te che la vedi brutta e da sistemare, io non avrei saputo farla e faccio pure fatica a capirla!
Comunque fa quello che mi serve, nei prossimi giorni la implemento.
Grazie!
Magari mi prendo il tempo per commentarla.
Scusa ma ho fatto di fretta.
 

Sagenut

Expert
Licensed User
Longtime User
B4X:
Private Sub Button1_Click
    Dim pieces() As String    'Prepara un array di stringhe senza definirne la grandezza
    Dim cs As CSBuilder        'Dichiarazione del CSBuilder
    cs.Initialize            'Inizializzazione CsBuilder
    pieces = Regex.Split(" ", EditText1.Text)    'Spezzetta il testo di EditText in parole singole (divide ad ogni SPAZIO) e riempie l'array
    For x = 0 To pieces.Length - 1        'Effettua un ciclo in tutto l'array e verifica se la parola inizia con WWW. o meno per capire se è un link
        If pieces(x).ToUpperCase.StartsWith("WWW.") Then    'Controlla se la parola inizia con WWW. Il ToUpperCase è per rendere tutto maiuscolo per avere solo una caso (WWW.)
            cs.Underline.Color(0xFF00D0FF).Clickable("word", pieces(x)).Append(pieces(x) & " ").PopAll    'Se la parola inizia con WWW. la aggiunge al CSBuilder come Link. "word" è il nome dell'evento che gestirà il Click sui Link. Se lo cambi devi modificare anche il nome della SUB che troverai dopo
        Else
            cs.Color(Colors.Black).Append(pieces(x) & " ")    'Se non inizia con WWW. la aggiunge come testo semplice
        End If
    Next
    cs.PopAll    'Chiude il CSbuilder
    EditText1.Text = cs        'Assegna alla EditText il testo prodotto dal CSBuilder con i Link Cliccabili
    cs.EnableClickEvents(EditText1)        'Abilita i Link Cliccabili nel testo della EditText
End Sub


'QUESTA SUB ERA RIMASTA DA UN TEST PRECEDENTE, NON SERVE
'Sub CreateClickableWord(Text As String) As CSBuilder
'    Dim cs As CSBuilder
'    Return cs.Initialize.Underline.Color(0xFF00D0FF).Clickable("word", Text).Append(Text).PopAll
'End Sub

Private Sub word_Click (tag As Object)        'Questa Sub gestisce cosa deve accadere con i Link Cliccabili
    Dim url As String    'Stringa per contenere l'URL definitivo
    If tag.As(String).ToUpperCase.StartsWith("HTTP") Then    'Se il link non inizia con HTTP:// glielo aggiunge perchè altrimenti a me non si apriva il browser
        url = tag.As(String)
    Else
        url = "http://" & tag.As(String)
    End If
    Dim ph As PhoneIntents        'Questa parte fà aprire il browser al link indicato
    Dim i As Intent
    i = ph.OpenBrowser(url)
    StartActivity(i)
End Sub
Prova a vedere se così ti chiarisce qualcosa.
 

Star-Dust

Expert
Licensed User
Longtime User
Troppo complicato. Pensate a una soluzione più semplice e di poche righe.
Alla fine non sta chiedendo niente di più di quello che succede quando inseriamo un url in un post del forum... cambiarlo in un link
 

Sagenut

Expert
Licensed User
Longtime User
Troppo complicato. Pensate a una soluzione più semplice e di poche righe.
Alla fine non sta chiedendo niente di più di quello che succede quando inseriamo un url in un post del forum... cambiarlo in un link
Hai ragione, ma io ho dato. ?
 

LucaMs

Expert
Licensed User
Longtime User
Troppo complicato. Pensate a una soluzione più semplice e di poche righe.
Alla fine non sta chiedendo niente di più di quello che succede quando inseriamo un url in un post del forum... cambiarlo in un link
Sul sito ci sono già esempi di Label con link clickabili, belli e pronti. E' la faccenda EditText che non mi convince; consentire all'utente di inserire l'url nel db ma anche di testarlo?
 
Top