TextView-width in einer Schleife ändern

  • Antworten:3
  • OffenNicht stickyNicht beantwortet
  • 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

Ludy
  • Mod
  • Blogger
  • Forum-Beiträge: 6.782

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.☺

Lebensmittelwarnung App-Thread

Download Samsung Firmware Tool

Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.311

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. :) ;)

  • 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