French Scroll fonction

jojo12

Member
Licensed User
Je suis perdu pour ajouter une fonction Scroll à mon programme, entre xCustomlistview, B4xView, B4XPages, etc.
Cela semble simple mais je n'y comprends rien.

Mon programme manipule uniquement du texte (ma base : un millier de .txt comprenant de 3 à 200 paragraphes chacun).

Si quelqu'un pouvait me faire un programme de démonstration dans lequel on lit un fichier txt avec 3 ou 4 paragraphes pour afficher ce texte avec un scroll vertical.

Merci
 

klaus

Expert
Licensed User
Longtime User
As-tu déjà commencé ton programme ?
Si oui, postes ce que tu as fait.
Pour quelle plateforme est-il prévu ?
xCustomListView est une ScrollView / ScrollPane évoluée.
B4XView sont des views multi-plateforme basées sur des views natives avec quelques propriétés supplémentaires, tu trouves un tableau des compatibilités ICI..
B4XPages est une structure permettant d'écrire des programmes multi-plateforme avec le même code.

Pour afficher un long texte, tu peux t'inspirer de ce programme, B4A, qui utilise une ScrollView et un Label : LongTextSimple
 
Last edited:

jojo12

Member
Licensed User
J'ai fait marcher le programme.
La plateforme est uniquement B4A.
Comme je pense ne plus beaucoup retoucher à la programmation, j'aurais voulu une version évoluée comme xCustomListView. Mais si c'est trop compliqué je resterai avec ScrollView / ScrollPane.
Je vois que dans l'exemple (LongTextSimple), on utilise un label pour le texte. Je pensais que les labels étaient toujours limités en nombre de caractères, et il va falloir que je vérifie si je peux y loger 200 paragraphes ou plus.
 

klaus

Expert
Licensed User
Longtime User
xCustomListView est une ScrollView dans laquelle on peut ajouter des Panels avec d'autres views à l'intérieur ou un Label pour du texte.
Je n'ai pratiquement jamais utilisé de xCustomListView.
Il y a beaucoup d'exemples sur le forum avec des xCustomListView.
Je pensais que les labels étaient toujours limités en nombre de caractères,
Non, il me semble avoir lu une fois qu'il y a une limite de 64 kbyte, mais cela a peut être évolué de puis.

et il va falloir que je vérifie si je peux y loger 200 paragraphes ou plus.
Afficher 200 paragraphes dans un Label me semble énorme.
Je pense que les utilisateurs vont se lasser rapidement de devoir scroller à travers une telle quantité de texte.
Comment ces textes sont-ils formatés.
Est-ce qu'il y a une caractère spécial pour leur separation ?
Si oui on pourrait n'afficher qu'un seul paragraphe à la fois et passer au suivant ou au précédent avec deux boutons.
 

jojo12

Member
Licensed User
Apparemment, je ne suis pas tombé sur les exemples simples pour xCustomListView. Même pour la solution LongTextSimple, j'étais passé à côté. Merci de m'y avoir ramené.


Le Label peut engloutir un livre de 250 pages. Je pourrais faire du browse sur les fichiers en consultation pure. Les 200 paragraphes sont un maximum ; cela tourne en moyenne autour de 80.


La base de données est créée par l'utilisateur : des fichiers .txt.
Ces fichiers sont des fichiers à thème et sont créés par copies successives de paragraphes pris à partir de livres de références.

Un fichier à thème peut ensuite être édité pour faire des modifications. J'utilise alors non un Label, mais un AutoCompleteEditText. J'espère pouvoir utiliser le scrolling vertical avec AutoCompleteEditText comme je vais pouvoir le faire avec Label.
 

klaus

Expert
Licensed User
Longtime User
Le Label peut engloutir un livre de 250 pages.
Et ça représente combien de lignes de texte ?
Comme déjà indiqué, devoir scroller des centaines de lignes n'est pas agréable.

As-tu un exemple de ce genre de fichiers ?

Es-tu sûr qu'un AutoCompleteEditText est la solution et pas un EditText standard ?
Pourquoi afficher des dans une liste des mot déjà entrés ?

Je repose ma question: as-tu déjà commencé un projet ?
Si oui pourrais-tu le poster et je pourrais y jeter un coup d’œil.
 

jojo12

Member
Licensed User
Les 250 pages, c'est parce que je n'ai pas fait attention au fichier que j'ai pris.
Comme je l'ai déjà dit, la moyenne de mes fichiers comportent 80 paragraphes, ce qui me semble tout à fait gérable avec le scrolling.

L'application existe déjà depuis des années.
L'ennui, c'était qu'à chaque fois -- sans scrolling -- j'étais obligé d'utiliser le doigt avec souvent des retours sporadiques en début de fichier.
C'est la raison pour laquelle je veux y mettre le scrolling. Cela donnera plus d'aisance et de confort.

Là encore, je suis surpris que je pouvais travailler aussi bien avec EditText qu'avec AutoCompleteEditText. Dans les langages que je connaissais, Label et EditText ne pouvait comporter que très peu de texte.

Envoyer un démonstrateur du programme, c'est possible mais il me faudrait un peu de temps...
 

klaus

Expert
Licensed User
Longtime User
Ci-joint un petit programme démonstrateur avec une CustomView maison.
Celle-ci est composée d'une ScrollView et d'une EditText plus une fonction de scrolling rapide réalisées avec deux Panels.
Plus un bouton permettant d'autoriser ou de verrouiller l'édition du texte.
J'ai même testé avec un texte comprenant 20000 lignes, j'ai laissé 2000 dans le programme.
En scrollant avec le doigt, le curseur apparait et on peut le bouger, il disparait au bout de 3 secondes de non activité.

1715151827902.png
 

Attachments

  • TresLongTexteEditText.zip
    12.4 KB · Views: 20
Last edited:

jojo12

Member
Licensed User
Cette dernière version TresLongText est vraiment super, et j'adore le curseur, car les personnes que je connais n'arrive pas à chopper le curseur sur la version classique, et c'est tout juste s'il le voit.
J'ai essayé d'y mettre un de mes fichiers, mais j'ai vu que je ne pouvais pas faire fonctionner le programme sans RunTimePermissions et de stocker mon fichier dans Android/Data/B4a..../Files/.
Or, à part que j'ai dû faire une version RunTimePermissions de mon programme pour une personne, mon programme continue de tourner sur un emplacement de la mémoire interne.
En fait, j'ai fait une version multilingue de mon programme qui utilise exactement les mêmes fichiers et la même base de données que mon programme normal en mémoire interne. C'est pourquoi j'hésite à tout basculer car je ne vois pas comment faire pour maintenir les deux versions du programme qui partageraient les mêmes fichiers de consultation et la même base de données sous Android/Data/B4a..../Files/, et qu'il me faudrait donc renoncer à cette version multilingue.
Dans ce cas, il me semble que je ne peux que prendre la solution de base scrollview.
 
Last edited:

klaus

Expert
Licensed User
Longtime User
Dans ce cas, il me semble que je ne peux que prendre la solution de base scrollview.
Je ne comprends pas ?
La CustomView LongTextEditText est une Scrollview standard, mais sous forme de custom view.
On peut y mettre n'importe quel texte sous le forme d'une variable String.
 

jojo12

Member
Licensed User
Avec le RunTimePermissions, n'y a-t-il pas obligatoirement un environnement dédié pour chaque programme élaboré, mettons P1 et P2 : Data/P1/Files et Data/P2/Files. Mais que fait-on si P1 et P2 partagent le même environnement fichiers ? Si j'ai une solution, je suis prêt à la prendre.
Mais si c'est impossible, je préfère retarder un peu car je devrais me débarrasser de P2. Et si CustomView LongTextEditText exige cette localisation spécifique (Android/Data...), je préfère attendre et me rabattre temporairement sur le Scrollview classique car avec la localisation en mémoire interne des fichiers je peux utiliser un environnement fichiers commun.
 

klaus

Expert
Licensed User
Longtime User
Et si CustomView LongTextEditText exige cette localisation spécifique (Android/Data...),
CustomView LongTextEditText n'exige aucune localisation particulière.
CustomView LongTextEditText est une ScrollView standard.
Dans le programme que j'ai posté il n'y a aucun accès à la mémoire, le texte est généré dans le programme.
Les problème d'accès à la mémoire resterons quelle que soit le conteneur du texte que tu pourrais utiliser.

je préfère attendre et me rabattre temporairement sur le Scrollview classique car avec la localisation en mémoire interne des fichiers je peux utiliser un environnement fichiers commun.

Je ne comprends pas quelle différence tu fais rentre le Scrollview classique et le CustomView LongTextEditText ?
Et pourquoi l'accès à la mémoire serait différent, l'un l'exigerait et pas l'autre ?

Il faut dire que Google met tellement de restrictions pour les accès à la mémoire que ça devient de plus en plus compliqué.
Je n'ai encore jamais essayé d'avoir deux programmes différents accéder aux mêmes fichiers depuis que Google a mis toutes ces restrictions et ça semble de devinir en plus restrictif.
Dans des anciennes versions d'Android on pouvait utiliser File.DirRootExternal, et c'était protique, mais ça n'est plus possible.
Après on pouvait y accéder avec RuntimePermissions.GetSafeDirDefaultExternal dans Android/Data..., ce répertoire est accessible depuis l'extérieur avec un PC, mais pas avec un autre programme sur le même appareil.
 

jojo12

Member
Licensed User
Dans le programme que j'ai posté il n'y a aucun accès à la mémoire, le texte est généré dans le programme.
Il doit y avoir un malentendu, car j'ai bien compris comment fonctionne ton programme, et cela marche très bien.
Je parlais de son adaptation dans mon programme.

Je ne comprends pas quelle différence tu fais rentre le Scrollview classique et le CustomView LongTextEditText ?
Quand j'ai changé le programme LongTextEditText pour accéder au stockage interne où se trouvent mes fichiers, il a refusé l'installation. (Mon programme tourne avec des File.DirRootExternal.)
Par contre, en mettant un fichier dans /Android/Data/b4A..../Files, cela à fonctionner.

Le manifeste de LongTextEditText affiche les valeurs minSdkVersion="21" android:targetSdkVersion="33", quand mon programme donne respectivement les valeurs 4 et 14.
Mais même en changeant les valeurs du manifeste de LongTextEditText pour les rabaisser à celles de mon programme, il a quand même refusé l'installation.
Donc, par Scrollview classique, j'entends celui qui fonctionne dans mon programme avec les valeurs 4 et 14.

Tout ce bazar est bien évidemment dû aux nouvelles restrictions Google.

Je pense tout mettre à niveau et me débarrasser des File.DirRootExternal pour RuntimePermissions.GetSafeDirDefaultExternal, et ainsi intégrer CustomView LongTextEdit.
Et passer le manifeste aux valeurs 21 33 dans mon programme.
 

klaus

Expert
Licensed User
Longtime User
As-tu essayé de charger le fichier LongTextEditText.bas dans ton programme qui a les valeurs 4 et 14 dans le manifest.
Et utiliser LongTextEditText au lieu de la ScrollView, ça doit fonctionner.
Avec RuntimePermissions.GetSafeDirDefaultExternal le répertoire est propre au programme et n'est accessible, sur l'appareil, que par ce seul programme.
Aucun autre programme sur l'appareil peut y accéder, mais ce répertoire est accessible par le PC via une connexion USB.
Je suppose que le programme n'est pas prévu d'être publié sur Play Store, car là ça va coincer.
Et je ne sais pas si Google va accepter encore longtemps l'installation sur l'appareil de programmes limités à d'anciennes versions d'Android.
Je viens d'essayer le programme TresLongTextEditText en mettant les limites à 4 et 14 dans le manifeste et ça fonctionne.
 

klaus

Expert
Licensed User
Longtime User
Ci-joint le projet avec versions Android 4 / 14 et sauvetage et lecture du teste sur File.DirRootExternal.
Et ça fonctionne.
Au 1er lancement du programme le texte est défini dans le code et sauvé, lors des lancements suivants le texte est lu.
 

Attachments

  • TresLongTexteEditText1.zip
    12.6 KB · Views: 8

jojo12

Member
Licensed User
J'ai récupéré ton programme.
Hier, j'ai pesé le pour et le contre des solutions, et je me suis rendu compte qu'il me fallait absolument rester avec AutoCompleteEditText car le programme met en couleur des mots-clés ainsi que des styles différents (gras, souligné, italique).
J'ai réussi à coller le ScrollView sur l'AutoCompleteEditText et ça marche parfaitement. Il m'a fallu un peu de temps pour intégrer un certain nombre de choses dont le fait que AutoCompleteEditText devait être intégré par programmation dans le panel Scrollview et qu'il me fallait positionner SingleLine à False. Bref, des choses toutes simples une fois assimilées.
Comme tu l'as deviné, mon application n'est pas destinée à se retrouver dans le Playstore. Elle ne concerne que quelques personnes.
Je voudrais de dire un grand merci pour ton soutien et ta patience.
 

jojo12

Member
Licensed User
Android m'a refusé l'installation.
J'ai changé 4/14 par 21/33 dans le manifeste. L'installation s'est effectuée mais il met fin immédiatement à l'application quand elle est exécutée.

Des choses bizarres se produisent de plus en plus souvent alors qu'il y a un à deux ans l'application était parfaitement stable dans tous les domaines.

Cela est sans doute dû au durcissement des règles de sécurité, et ma tablette doit avoir déjà 6 ans avec Android 11 pour le moment.
 

klaus

Expert
Licensed User
Longtime User
Il faut d'abord supprimer l'ancienne version.
Je suppose que lors de la compilation tu obtiens cet écran:

1715684360643.png


Cliques sur Plus de détail:

1715684404537.png


Cliques sur Installer quand même:

1715684551797.png


Cliques sur Continuer:

1715684599504.png


Cliques sur OK.

Et ça devrait fonctionner.
 
Top