Frage

Ich mag eine Ansicht in einem FrameLayout programmatisch hinzufügen und es in einem bestimmten Punkt zu platzieren im Layout mit einer bestimmten Breite und Höhe. Hat FrameLayout dies unterstützen? Wenn nicht, soll ich einen Zwischenviewgroup verwenden, um dies zu erreichen?

int x; // Can be negative?
int y; // Can be negative?
int width;
int height;
View v = new View(context);
// v.setLayoutParams(?); // What do I put here?
frameLayout.addView(v);

Meine ursprüngliche Idee war, eine AbsoluteLayout zum FrameLayout und legen Sie den Blick in den AbsoluteLayout hinzuzufügen. Leider fand ich nur, dass AbsoluteLayout veraltet.

wird Alle Zeiger sehr geschätzt werden. Danke.

War es hilfreich?

Lösung

Es ist wahr, dass mit FrameLayout alle Kinder auf die links auf dem Bildschirm oben gebunden sind, aber Sie haben immer noch eine gewisse Kontrolle mit ihrer Polsterung Einstellung. Wenn Sie unterschiedliche Polsterung Werte verschiedene Kinder eingestellt, werden sie an verschiedenen Orten in der FrameLayout angezeigt.

Andere Tipps

Das folgende Beispiel (Arbeitscode) zeigt, wie eine Ansicht zu platzieren (EditText) innerhalb eines FrameLayout. Auch zeigt es, wie die Position des EditText, um den setPadding Setter des FrameLayout (jedes Mal wenn der Benutzer klickt auf der FrameLayout, die Position des EditText wird auf die Position des Klicks) mit:

public class TextToolTestActivity extends Activity{
    FrameLayout frmLayout;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        frmLayout = (FrameLayout)findViewById(R.id.frameLayout1);
        frmLayout.setFocusable(true);
        EditText et = new EditText(this);

        frmLayout.addView(et,100,100);
        frmLayout.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.i("TESTING","touch x,y == " + event.getX() + "," +     event.getY() );
                frmLayout.setPadding(Math.round(event.getX()),Math.round(event.getY()) , 0, 0);
            return true;
        }
    });

}

}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <FrameLayout 
        android:id="@+id/frameLayout1" 
        android:layout_height="fill_parent" android:layout_width="fill_parent">
    </FrameLayout>

</LinearLayout>

Sie können auch einen Rand um die neu hinzugefügte Ansicht fügen Sie es im Inneren des FrameLayout zu positionieren.

FrameLayout frameLayout = (FrameLayout) findViewById(R.id.main); // or some other R.id.xxx
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.setMargins(0, metrics.heightPixels - 20, 0, 0);
View v = new View(context);
v.setLayoutParams(params);
frameLayout.addView(v);

Dies wird die FrameLayout 20 Pixel vom unteren Rand des Bildschirms positionieren.

Edit: abgeschlossen das Beispiel, so dass es von selbst steht. Und oh, ja es funktioniert.

Von der Link Quinn1000 bereitgestellt:

  

Sie können mehrere Kinder zu einem FrameLayout hinzufügen, aber alle Kinder sind an der Spitze hängen links auf dem Bildschirm.

Das heißt, Sie nicht Ihre Ansicht zu einem bestimmten Punkt innerhalb des FrameLayout setzen können (außer Sie es an der Spitze sein wollen linke Ecke: -))

.

Wenn Sie die absolute Positionierung der Ansicht benötigen, versuchen Sie die AbsoluteLayout :

  

Ein Layout, das Sie angeben genaue Positionen (x / y-Koordinaten) ihre Kinder ermöglicht. Absolute Layouts sind weniger flexibel und schwieriger zu verwalten als andere Arten von Layouts ohne absolute Positionierung.

Wie die Breite und Höhe der Ansicht für die Einstellung, wie auch Quinn1000 sagte, können Sie die v.setLayoutParams() Verfahren liefern ein LayoutParams Objekt, auf dem Behälter ab, die Sie gewählt haben (AbsoluteLayout, Linearlayout, etc.)

Der Thread hier auf Stackoverflow bei

How do you setLayoutParams () für einen Image?

Abdeckungen es etwas.

Zum Beispiel: LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams (30, 30); yourImageView.setLayoutParams (layoutParams);

bedeutet, dass Sie ein LinearLayout.LayoutParams zu definieren müssen (oder in Ihrem Fall ein FrameLayout.layoutParams) Objekt an die setLayoutParams Methode Ihres v Objekts zu übergeben.

http://developer.android.com/reference/android/widget /FrameLayout.html

es macht fast sieht es aus wie Sie Ihre v fragen könnte:

generateDefaultLayoutParams () über diese Methode, wenn Sie die Parameter nicht spezifisch definiert sind.

Aber es ist zu spät, und diese Verbindungen machen meine Augen ein wenig bluten. Lassen Sie mich wissen, wenn sie Nhelp any: -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top