IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Android text view a pozadí písmen

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jenkings
Tvůrce
Avatar
Jenkings:29.1.2023 20:17

Ahoj, dělám aplikaci pro android a řeším takový zapeklitý problém.
Mám TextView a v něm se dynamicky mění text. Vždy je to nějaký odstavec, řádově maximálně nižší desítky slov.

Potřeboval bych ale docílit toho, abych byl schopen některé znaky (většinu abecedy) zobrazovat tak, že bude daný znak ve čtverečku.
Mám třídu, s metodou,která vezme na vstupu daný znak, a následně rozhodně, zda písmeno má být v rámečku, nebo ne.

Zkoušel jsem použít LinearLayout, nebo něco podobného, a do toho následně cpát jednotlivá písmena jako samostatné TextView, kterým jsem nastavoval styl, podle toho, jestli mají být v rámečku nebo ne.
Problém byl jednak v tom, že se mi nepodařilo zařídit zalomení řádku, když se text nevešel na jeden řádek, což by se ale asi podařilo nějak vyřešit. Horší problém ale vidím v tom, že by se mi stejně nepodařilo v tomto případě zařídit zalamování řádku tak, aby vždy slovo drželo pohromadě a nebylo rozděleno.

Odpovědět
29.1.2023 20:17
Největší časovou náročnost má výpočet časové náročnosti..
Avatar
Jenkings
Tvůrce
Avatar
Jenkings:30.1.2023 11:52

Tak jsem se maličko pohnul.

TextView sentenceTV = gsa.findViewById(R.id.sentenceTV);
      SpannableStringBuilder builder = new SpannableStringBuilder();
      for(int i = 0; i < currentSentence.length();i++){

          try {
              String letter = currentSentence.getString(i); //currentSentence js JSONArray (pole znaků)
              Drawable d = gsa.getResources().getDrawable(R.drawable.letter_square);
              d.setBounds(0, 10, d.getIntrinsicWidth(), d.getIntrinsicHeight());
              ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
              SpannableString letterSpannable = new SpannableString(letter);
              letterSpannable.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);    //Tady je zakopaný pes
              letterSpannable.setSpan(new ForegroundColorSpan(Color.RED), 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
              builder.append(letterSpannable);


          } catch (JSONException e) {
              e.printStackTrace();
          }

      }
      sentenceTV.setText(builder, TextView.BufferType.SPANNABLE);

Teď ale řeším problém, že se mi buď zobrazí jen čtverečky na správných místech (zatím dávám do čtverečku všechny znaky), ale chybí v nich text. Když ale zakomentuji řádek s přiřazením drawable,

letterSpannable.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

tak se text zobrazí správně (ale samozřejmě bez čtvercového obrysu).
Zkoušel jsem i udělat to drawable s průhledným pozadím,jestli to jen nepřekrývá ten text, ale výsledek stejný.

Nahoru Odpovědět
30.1.2023 11:52
Největší časovou náročnost má výpočet časové náročnosti..
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.