2016-05-26 14 views
0

ich eine Aktivität haben, die einen Knopf hat und durch Code, den ich einen Kreis zeichnen, so meine Circle-Klasse ist:setContentView und Schaltflächen im Android

public class Circle extends View { 

private float x = 100; 

private float y = 100; 

private float radius = 50; 

public Circle(Context context) { 
    super(context); 
} 

protected void onDraw(Canvas canvas){ 
    Paint paint = new Paint(); 
    canvas.drawCircle(x, y, radius, paint); 

} 

} 

Und der Code meiner Tätigkeit ist:

public class AnotherTest extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Circle c = new Circle(this); 
    setContentView(c); 
    } 

    } 

Aber wenn ich SetContentView aufrufen, scheint die Schaltfläche gelöscht werden. Irgendwelche Tipps, um den Kreis zu zeigen und den Knopf zu bewahren?

Antwort

0

Die Schaltfläche, die Sie erwähnt haben, befindet sich in der Layout-XML-Datei Ihrer Aktivität? Wenn ja, könnten Sie den Code bereitstellen? setContentView() zeigt nur den Kreis an. Wenn Sie den Kreis zu Ihrem bestehenden Layout hinzufügen möchten, müssen Sie ihn zu einer ViewGroup im XML Ihrer Aktivität hinzufügen.

public class AnotherTest extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.anothertest_activity); 
    } 
} 

Und die (res/layout /) wie folgt anothertest_activity.xml Datei aussehen könnte:

Sie so etwas tun könnte

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout android:id="@+id/content" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

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

<your.package.Circle 
    android:id="@+id/myCircle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

In Android Studio, Direkt unter dem XML-Code befinden sich zwei Registerkarten: "Design" und "Text". Wechseln Sie zu "Text", um Code einzufügen, wechseln Sie zurück zu "Design", um Ihre Elemente zu positionieren.

Wenn Sie Ihre Ansichten ziehen, haben Sie eine Layout-XML-Datei. In der Aktivität müssen Sie diese Datei als Ihre Inhaltsansicht festlegen, andernfalls würden Sie Ihre Ansichten nicht sehen. Aber Sie können Ansichten dynamisch hinzufügen, indem Sie so etwas wie dies zu tun:

<?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout android:id="@+id/content" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/my_viewgroup" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<Button 
    android:id="@+id/myButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 
</RelativeLayout> 

Und in Ihrer Aktivität:

public class AnotherTest extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Still your xml with your button but without circle 
     setContentView(R.layout.anothertest_activity); 

     // First find your ViewGroup to add Views to 
     RelativeLayout viewGroup = (RelativeLayout) findViewById(R.id.my_viewgroup); 
     // Add a new circle to existing layout 
     viewGroup.addView(new Circle()); 
    } 
} 

Sie auch alles dynamisch hinzufügen könnte:

public class AnotherTest extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     ViewGroup viewGroup = new LinearLayout(this);   
     setContentView(viewGroup); 

     viewGroup.addView(new Button()); 
     viewGroup.addView(new Circle()); 
    } 
} 

aber ich empfehlen, mit XML-Layouts Vielleicht wollen Sie einen Blick auf Android Layouts

+0

Nein, zog ich aus der Umgebung (Android Studio) auf die Aktivität. – NUN

+0

Könnte es nur durch Code gemacht werden? Wie auch immer, danke und ich werde deine Antwort versuchen. – NUN

+0

Was wäre, wenn onDraw so etwas tun würde: ... onDraw (Canvas Canvas) {Paint p = new Paint; für (int i = 0; i <20; i ++) { canvas.drawCircle ((int) Math.random() * 150, (int) Math.random() * 150, 20, paint); } Würde es von XML-Layouts gemacht werden? – NUN