Textview innerhalb RelativeLayout in benutzerdefinierte Ansicht nicht die Anwendung der Schwerkraft, richtig?
Also ich habe ein setup, wo ich bin meine eigene Ansicht, und ich bin hinzufügen einige TextViews in es. Aber die gravity Einstellung ist gebrochen, für Sie. (Es dreht sich horizontal, aber nicht vertikal) mache ich es so, weil es gibt anderen Sachen hab ich auch die Zeichnung in meiner Ansicht neben nur die TextViews, aber diejenigen, die funktionieren. Es gibt nur ein problem mit dem TextView Schwerkraft. Hier ist teilweise code von dem, was ich habe.
public class myView extends View {
protected RelativeLayout baseLayout;
protected TextView textView1;
protected TextView textView2;
public myView (Context context) {
super(context);
setLayoutParams(new LayoutParams(FILL_PARENT, FILL_PARENT));
baseLayout = new RelativeLayout(context);
baseLayout.setLayoutParams(new LayoutParams(FILL_PARENT, FILL_PARENT));
textView1 = new TextView(context);
//initialize textView1 string, id, textsize, and color here
textView2 = new TextView(context);
//initialize textView2 string, id, textsize, and color here
baseLayout.addView(textView1);
baseLayout.addView(textView2);
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
Resources res = getResources();
//calculate out size and position of both textViews here
textView1.layout(left1, top1, left1 + width1, top1 + height1);
textView1.setGravity(Gravity.CENTER);
textView1.setBackgroundColor(green); //just to make sure it's drawn in the right spot
textView2.layout(left2, top2, left2 + width2, top2 + height2);
textView2.setGravity(Gravity.CENTER);
textView2.setBackgroundColor(blue); //same as above
baseLayout.draw(canvas);
}
}
Dies zeichnet die TextViews in den genauen spots und Größen, dass ich Sie will (ich weiß, weil der hintergrund-Farbe), aber die Schwerkraft setzt Sie nur horizontal zentriert.. nicht vertikal. (ja, die TextViews sind größer als der eigentliche text-strings)
Könnte ich WAHRSCHEINLICH implementieren die Lösung finden Sie hier (TextView Schwerkraft), aber das scheint nicht wie eine sehr effiziente und zuverlässige Möglichkeit, dies zu umgehen. Gibt es etwas, was ich falsch mache, was die Schwerkraft nicht mehr ordnungsgemäß funktioniert? Jede Eingabe/Hilfe wird geschätzt.
- Zwei Dinge: 1. Ich wusste nicht, dass eine Ansicht könnte eine ViewGroup ? 2. Warum verwenden Sie ein RelativeLayout, wenn das Kind die Aussicht auf Positionen gesetzt, absolut ?
- Never mind 1, ich wusste nicht, ViewGroup der erweiterten Ansicht !!
- Es ist schon eine Weile her, seit ich dies geschrieben, aber wenn ich mich Recht erinnere - ein AbsoluteLayout erforderlich, verschiedene Konstruktor-Argumente, und es war einfach nur einfacher eine RealtiveLayout.. Aber dass kann nicht korrekt sein. :/ So oder so - Sie möchten möglicherweise einige anzeigen Positionen relativ und einige, absolut zu sein, - wer weiß, was Sie vielleicht geplant haben. Zumindest hätten Sie die Möglichkeit, mit einem relative layout. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok.. So ich dachte mir, diese. Ich gerade hatte, um die measure () - Methode auf jedem TextView.. Also mein neuer code sieht wie folgt aus:
Nun es dreht sich sowohl vertikal als auch horizontal, wie es sollte. Wenn Sie mit den gleichen Problemen, das ausprobieren.
WRAP_CONTENT
auf die TextView und ändern Sie die Eltern richten (Gravity.CENTER
) oderalignParent
..Sie können mehrere Schwerkraft-Parameter mit setGravity wie diese.
Hava einen Blick auf Wie Zentriere ich text horizontal und vertikal in einem TextView in Android?
Ich lief in dieses problem, auch. Mein Problem war, dass, wenn ich die Schwerkraft auf TextView durch den Aufruf TextView.setGravity(), es im hintergrund wirkt das layout selbst(Textview) in der übergeordneten Ansicht.
Hier ist, was ich für den workaround beheben:
Sollten Sie greifen die Idee, dass Sie verwenden sollten, wrapper zu umgehen.