Frage

Ich habe in den letzten Stunden nach der Antwort auf eine sehr dumme Frage gesucht. Ich weiß, wie man in Android auf die Leinwand zeichnet, wenn Sie die Ansichtsklasse erweitern, ONDRAW und setContentView () auf eine neue Instanz dieser Klasse ändern und. Ich muss jedoch auch 2 Textviews und 2 EditTexte am Ende der Aktivität haben. Wenn setContentView () nur auf diese Ansicht festgelegt ist, werden diese Ansichten offensichtlich nicht angezeigt. Wie können all dies auf den Bildschirm setzen?

Bearbeiten: Hier ist mein Code: (Der Paketname ist Android.physicsgine)

package android.physicsengine;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;
import android.widget.RelativeLayout;

public class ResultantForceEngine extends Activity {
private EditText mag;
private EditText dir;
private View image;
private RelativeLayout layout;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.resultant_force);

    mag = (EditText)findViewById(R.id.magnitude);
    dir = (EditText)findViewById(R.id.direction);
}

public class MyView extends View{
    public MyView(Context context){

        super(context);
    }
    public MyView(Context context, AttributeSet attrs){

        super(context, attrs);

    }
    public MyView(Context context, AttributeSet attrs, int defStyle){

        super(context, attrs, defStyle);
    }

    @Override
    protected void onDraw(Canvas canvas){
        canvas.drawColor(Color.BLACK);
        Paint circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        circlePaint.setColor(Color.RED);
        canvas.drawLine(canvas.getWidth()/2, canvas.getHeight()/2-200, canvas.getWidth()/2 ,canvas.getHeight()/2+200, circlePaint);
        canvas.drawLine(canvas.getWidth()/2-200, canvas.getHeight()/2, canvas.getWidth()/2+200 ,canvas.getHeight()/2, circlePaint);
    }
}
}

und das XML

<view class="android.physicsengine.ResultantForceEngine$MyView"
              android:id="@+id/image"
              android:layout_alignParentLeft="true"
              android:layout_alignParentRight="true"
              android:layout_alignParentTop="true"
              android:layout_alignParentBottom="true"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent" />
<TextView     android:id="@+id/magText"
              android:text="Magnitude (N) ="
              android:textSize="15dip"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:padding="3dip"
              android:gravity="center_vertical" 
              android:layout_alignParentLeft="true"
              android:layout_alignParentBottom="true" />
    <EditText android:id="@+id/magnitude"
              android:inputType="numberDecimal"
              android:layout_alignParentBottom="true" 
              android:layout_toRightOf ="@id/magText"
              android:layout_width="wrap_content"
              android:padding="3dip"
              android:layout_height="wrap_content" />

    <TextView android:id="@+id/dirText"
              android:text="Angle (deg) ="
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:textSize="15dip"
              android:layout_alignParentBottom="true"
              android:layout_toRightOf ="@id/magnitude"
              android:padding="3dip"
              android:gravity="center_vertical" />
    <EditText android:id="@+id/direction"
              android:inputType="numberDecimal"
              android:layout_alignParentBottom="true" 
              android:layout_toRightOf ="@id/dirText"
              android:layout_alignParentRight="true"
              android:layout_height="wrap_content" 
              android:padding="3dip"
              android:layout_width="wrap_content"/>

War es hilfreich?

Lösung

Grundsätzlich müssen Sie Ihre XML -Datei mit Ihrer benutzerdefinierten Ansichtsklasse und den anderen Widgets definieren. In Ihrem Fall gibt es die benutzerdefinierte Ansicht, 2 Textviews und 2 EditTexts in der XML -Datei.

Sie definieren die benutzerdefinierte Ansicht in XML genau wie jedes andere Widget, außer dass Sie den Namespace der Ansicht und den Klassennamen verwenden.

<com.example.android.myCustomView
    android:id="@+id/my_custom_view"
    ...

Dann in Ihrer Aktivität ein einfacher Anruf

setContentView(R.layout.main); 

Bearbeiten: Das Problem ist, dass Ihre Klasse privat ist, also ist es "nicht zu sehen", wenn Ihre Aktivität das Layout anruft und versucht, es aufzublasen.

Edit2: Natürlich funktioniert das nicht, Sie verwenden eine innere Klasse! Sie müssen solche Dinge kommunizieren, wenn Sie Antworten erwarten.

Die XML -Syntax für eine innere Klasse ist unterschiedlich.

<view class="com.example.android.MyClass$MyInnerClass"

Andere Tipps

Sie sollten in der Lage sein, die Klasse zu verwenden, die Sie in Ihrem res/layout/main.xml erweitert haben, genau wie Sie es in jeder anderen Ansichtsklasse ansehen würden, und Ihre Textansicht und Ihre Bearbeiten in der Layout -.xml -Datei wie normal hinzugefügt. Ich habe dies nicht persönlich gemacht, aber ich habe auf diese Weise benutzerdefinierte Ansichtsklassen verwendet.

Für Ihre SetContentView verwenden Sie dann nur die Layout .xml -Datei wie:

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top