3 Stimmen

Was ist die Alternative zu AbsoluteLayout in Android?

Ich sehe Beiträge, die sagen, dass FrameLayout die Alternative ist, und dass ich Ränder verwenden sollte, um Dinge zu positionieren (dies scheint mir als wild kontra intuitiv, aber ok... wenn es funktioniert, ich werde es nehmen). Allerdings kann ich nicht bekommen, es zu arbeiten, so, ich bin auf der Suche nach Unterstützung.

hier ist mein Code

    FrameLayout layout = new FrameLayout(this);
    layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

    Button btn = new Button(this);
    btn.setBackgroundResource(R.drawable.btn);

    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    lp.setMargins(100,100,100,100);

    btn.setLayoutParams(lp);   //i've tried with and without this line, no change

    layout.addView(btn , lp);

Die Schaltfläche wird bei 0,0 gezeichnet, egal was ich tue. Wenn ich die lp's LayoutParam zu FILL_PARENT ändern, wird die Schaltfläche dann gestreckt, um den gesamten Bildschirm zu nehmen (was Sinn macht).

WIE bringt man sie dazu, an einer anderen Stelle des Bildschirms zu zeichnen, unabhängig davon, was sich dort befindet?

Wie immer, vielen Dank im Voraus.

[EDIT] Es scheint, dass meine Frage nicht ganz klar ist (angesichts der Antworten), also...

Im obigen Code geht es darum, eine Schaltfläche zu erstellen, sie an ein Layout zu übergeben und sie bei 100,100 auf dem Bildschirm zu zeichnen.

Ich bin mir der Tatsache bewusst, dass dies auf verschiedenen Geräten unterschiedliche Dinge bedeuten kann. Damit habe ich kein Problem. Ich brauche einfach eine Möglichkeit, programmatisch und zur Laufzeit ein Element an einer BESTIMMTEN Stelle zu platzieren. Ich möchte mich nicht auf die Schwerkraft (oder die Gesetze der Thermodynamik) verlassen. Ich möchte einfach nur einen Ort angeben und das Element dort erscheinen lassen :)

4voto

Cheryl Simon Punkte 45901

Wie bereits erwähnt, ist es eine schlechte Idee, eine Schaltfläche an einer absoluten Pixelposition auf dem Bildschirm zu platzieren, und wird niemals auf allen verfügbaren Android-Telefonen funktionieren. Ich bin sicher, es gibt einen besseren Weg, um das gewünschte Layout zu erreichen.

Allerdings, um die Frage zu beantworten, wie gefragt: um es zur Laufzeit zu positionieren können Sie die AbsoluteLayout.LayoutParms verwenden.

AbsoluteLayout absoluteLayout = //get absolute layout

Button button = new Button();
AbsoluteLayout.LayoutParms params = absoluteLayout.generateDefaultLayoutParams();
params.x = 100;
params.y = 100;

absoluteLayout.addView(button, params);

1voto

Kosi2801 Punkte 20758

Eine gute Erklärung der verschiedenen verfügbaren Layouts finden Sie unter http://mobiforge.com/designing/story/understanding-user-interface-Android-part-1-layouts

Da ich anhand Ihrer Beschreibung nicht ganz verstehe, was Sie erreichen wollen (wollen Sie Dinge überlagern?), können Ihnen vielleicht die visuellen Beispiele dort helfen, zu verstehen, wie die Layouts funktionieren und wie man Dinge darauf positioniert.

0voto

Kevin Coppock Punkte 131486

Was genau wollen Sie mit dem Layout erreichen? Wenn Sie nur eine Schaltfläche benötigen - etwa in der Mitte des Bildschirms - können Sie einfach ein Layout mit erstellen:

<RelativeLayout
    android:xmlns="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    >
    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height = "wrap_content"
        android:text="@string/the_button_text"
        />
</RelativeLayout>

AbsoluteLayout ist eine schlechte Idee wegen der großen Anzahl von Bildschirmauflösungen, die Sie unterstützen müssen. Ein Abstand von 100 Pixeln auf einem Bildschirm kann die Hälfte ausmachen, während er auf einem Gerät mit höherer Auflösung weniger als ein Viertel des Bildschirms ausmacht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X