2016-05-06 12 views
0

Ich habe eine Aktivität namens GameLoop (Klasse, die Aktivität erweitert). Aber anstatt eine XML-Datei für das Layout zu verwenden, verwende ich eine Klasse dafür, da ich in der Lage sein soll, auf eine Leinwand zu zeichnen. (Ich habe in einigen Tutorials gesehen, dass dies das ist, was Sie tun sollen)Android - Erstellen Sie Button programmatisch

Die Layout-Klasse heißt GameLoopLayout.

Ich habe eine Spielschleife in der Layout-Klasse ausgeführt, kann Bitmaps auf dem Bildschirm rendern und die FPS steuern, alles ist in Ordnung. Aber jetzt möchte ich eine Schaltfläche hinzufügen, aber da ich keine XML-Layout-Datei verwende, weiß ich nicht, wie es geht. Kann mir bitte jemand helfen?

Was atm ich tue:

GameLoopLayout:

Button button; 
Canvas canvas; 
SurfaceHolder surfaceHolder; 

public GameLoopActivityLayout(Context context) { 
    //all necessary initializations here... 
    button = new Button(context); 
    button.setEnabled(true); 
    button.setLeft(10); 
    button.setTop(20); 
} 

//render function called during game loop 
private void render() { 
    if (!surfaceHolder.getSurface().isValid()) 
     return; 
    canvas = surfaceHolder.lockCanvas(); 
    //draw all game objects to canvas... 
    button.draw(canvas); 
    surfaceHolder.unlockCanvasAndPost(canvas); 
} 

Antwort

1

Erstellen von benutzerdefinierten Ansichten nicht Sie verhindern, dass XML-Layouts mit. Zum Beispiel:

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <com.yourpackage.GameLoopLayout 
     android:id="@+id/game_loop_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     ... /> 

</FrameLayout> 

Sie Ränder verwenden können und android:layout_gravity die Taste platzieren, wo immer Sie möchten.

Im Code erhalten Sie Zugriff auf Ihre GameLoopLayout wie jede andere Ansicht:

// inside of onCreate() 
mGameLoopLayout = (GameLoopLayout) findViewById(R.id.game_loop_layout); 
// do setup with GameLoopLayout 
+0

[Kommentar gelöscht] – jorgemf

+0

Ok, irgendwie habe ich es geschafft, obwohl ich ziemlich verloren bin. Können Sie mir bitte erklären, was hier gemacht wird? Hier ist die onCreate-Methode: setContentView (R.layout.game_loop); layout = (GameLoopLayout) findViewById (R.id.game_loop_layout); – Tirafesi

+0

@Tirafesi Worüber sind Sie verwirrt? Dies ist die Standardmethode für die Benutzeroberfläche von Android. Übergeben Sie ein XML-Layout an "setContentView()", dann suchen Sie die Ansicht anhand der ID, die Sie in der XML-Datei festgelegt haben. Das ist alles, was passiert. – Karakuri

4

versuchen unten Code:

LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout2); 

// add button 
Button b = new Button(this); 
b.setText("Button added dynamically!"); 
b.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
b.setId(MY_BUTTON); 
b.setOnClickListener(this); 
ll.addView(b); 
+0

Pflege zu erklären, wie das funktioniert? Was ist das lineareLayout2, und wo bekomme ich es? selbe Frage zur ID My_BUTTON – Tirafesi

+0

@Tirafesi private statisch final int MY_BUTTON = 100; füge das in deinem Code hinzu. –

Verwandte Themen