TextView-width in einer Schleife ändern

  • Antworten:3
Lothar Requardt
  • Forum-Beiträge: 5

10.12.2016, 06:12:01 via Website

Hallo,
ich habe folgendes Problem:
Ich möchte in einer App dynamisch, nach einer kurzen Wartezeit, die Width eines TextView ändern, um durch dadurch Werte anzeigen zu lassen, als Balken also.

Hier das entsprechende Programm:

public class Main extends AppCompatActivity {
private int breite;
private int i = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    startThread();

}

private void startThread() {
    Thread t = new Thread() {
        public void run() {

            do{
                breite = 1400 - i*100;
                Log.d("Tag",Integer.toString(breite));
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //MonsterMarkerSetzen
                        TextView tv = (TextView) findViewById(R.id.balken);
                        tv.getLayoutParams().width = breite;
                        TextView tv_2 = (TextView) findViewById(R.id.anzeige);
                        tv_2.setText("i ist " + i);
                    }


                });;

                try {
                    Thread.sleep(3000);
                } catch (Exception e) {
                    System.out.println(e);
                }
                i++;
            }while(i<10);

        }
    };

    t.start();
}

}

In dem TextView wird die Variable "i" korrekt alle drei Sekunden ausgegeben, die Width des TextView jedoch nicht geändert. Weiß jemand, woran das liegt?

Grüße,

Lothar

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

10.12.2016, 06:43:41 via App

Hallo Lothar,

herzlich willkommen hier im Forum (*)

hast du es so schon probiert?

LayoutParams params = tv.getLayoutParams();
params.width = breite;
tv.setLayoutParams(params);

— geändert am 10.12.2016, 06:43:55

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Lothar Requardt

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

10.12.2016, 09:34:40 via App

Soll das ein Forschrittsbalen werden?
Dann nimm lieber eine ProgressBar.

In welchem Layout ist das TextView?

— geändert am 10.12.2016, 09:34:53

LG Pascal //It's not a bug, it's a feature. :) ;)

Lothar Requardt

Antworten
Lothar Requardt
  • Forum-Beiträge: 5

11.12.2016, 05:39:28 via Website

Danke für die Antworten.
Der Tipp von Ludy schien mir gleich plausibel. Es reicht nicht, die params zu ändern, man muss sie nochmals explizit für das TextView setzen. Es funktioniert. Allerdings muss bei mir die Variable params zu "ViewGroup.LayoutParams" gecastet werden.
Was mir noch nicht klar ist, warum ein tv.setWidth nicht funktioniert. Genau gesagt, es funktioniert in der Schleife nur das erste mal, dann nicht mehr.
Der Tipp mit dem Progressbar war auch gut, und führt letzlich zu einer eleganteren Lösung des Problems, danke.
Ach, das TextView befindet sich in einem LinearLayout für den Hintergrundbalken, welches sich wieder in einem LinearLayout befindet., aber das ist jetzt nicht mehr wichtig.

Gruß,
Lothar

Antworten