Question

je cherche depuis quelques heures à la réponse à une question très stupide. Je sais comment dessiner sur la toile dans Android si vous étendez la classe d'affichage, modifier onDraw et ensemble setContentView () à une nouvelle instance de cette classe. Cependant, je dois avoir aussi 2 TextViews et 2 EditTexts au bas de l'activité et si setContentView () est définie uniquement avoir ce point de vue, ces vues seront, évidemment, ne pas afficher. Comment mettre tous ces éléments sur l'écran?

EDIT: Voici mon code: (le nom du package est android.physicsengine)

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);
    }
}
}

et le fichier 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"/>

Était-ce utile?

La solution

Fondamentalement, vous devez définir votre fichier XML avec votre classe de vue personnalisée et les autres widgets que vous avez. Dans votre cas, il y aurait la vue personnalisée, 2 textviews et 2 edittexts dans le fichier XML.

Vous définissez la vue personnalisée en XML comme tout autre widget sauf que vous utilisez l'espace de noms de la vue et le nom de la classe.

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

Alors dans votre activité un simple appel

setContentView(R.layout.main); 

Modifier. Le problème est votre classe est privée, donc elle « ne se voit pas » lorsque votre activité fait un appel à la mise en page et tente de le gonfler

Edit2: Bien sûr, cela ne fonctionnera pas, vous utilisez une classe interne! Vous devez communiquer des choses comme cela si vous vous attendez d'obtenir des réponses.

La syntaxe XML pour une classe interne est différente.

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

Autres conseils

Vous devriez être en mesure d'utiliser la classe que vous avez étendu dans vos res / layout / main.xml comme vous le feriez pour tout autre point de vue de classe, et ajoutez votre TextView et EditTexts dans le fichier .xml mise en page comme normal. Je ne l'ai pas fait personnellement, mais je l'ai utilisé des classes Voir personnalisées de cette manière.

Alors pour votre setContentView vous suffit d'utiliser la mise en page fichier .xml comme:

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top