Domanda

Sono stato alla ricerca per le ultime ore per la risposta a una domanda molto stupida. So come disegnare sulla tela in Android se si estende la classe di visualizzazione, modificare OnDraw e setContentView set () per una nuova istanza di quella classe. Tuttavia, ho bisogno di avere anche 2 TextViews e 2 EditTexts in fondo dell'attività e se setContentView () è impostato per avere solo quella vista, questi punti di vista saranno, ovviamente, non visualizzare. Come può mettere tutti questi sullo schermo?

EDIT: Ecco il mio codice: (il nome del pacchetto è 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);
    }
}
}

e il 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"/>

È stato utile?

Soluzione

In sostanza è necessario definire il file XML con la classe di visualizzazione personalizzata e gli altri widget che avete. Nel tuo caso, non ci sarebbe la visualizzazione personalizzata, 2 textviews e 2 edittexts nel file XML.

Si definisce la visualizzazione personalizzata in XML come qualsiasi altro widget, ad eccezione si utilizza lo spazio della vista e il nome della classe.

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

Poi all'interno della vostra attività di una semplice chiamata

setContentView(R.layout.main); 

Modifica:. Il problema è che la classe è privata, quindi "non si vede", quando la vostra attività effettua una chiamata il layout e cerca di gonfiare lo

Edit2: Naturalmente questo non funziona, si sta utilizzando una classe interna! Bisogna comunicare cose come questa, se ci si aspetta di ottenere risposte.

La sintassi XML per una classe interna è diversa.

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

Altri suggerimenti

Si dovrebbe essere in grado di utilizzare la classe che è esteso nelle vostre res / layout / main.xml proprio come si farebbe con qualsiasi altra classe View, e aggiungere il TextView e EditTexts nel file di layout XML come normale. Non ho personalmente fatto questo, ma ho usato personalizzati classi di visualizzazione in questo modo.

Quindi per la vostra setContentView si sarebbe solo utilizzare il file di layout XML come:

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top