1

ボタンのあるアクティビティがあり、コードで円を描くので、私の円クラスは次のとおりです。

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

}

}

そして、私の活動のコードは次のとおりです。

public class AnotherTest extends AppCompatActivity {

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

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

   }

しかし、setContentView を呼び出すと、ボタンが削除されたように見えます。円を表示してボタンを保持するためのヒントはありますか?

4

1 に答える 1

1

あなたが言及したボタンは、アクティビティのレイアウト XML ファイルにありますか? もしそうなら、あなたはコードを提供できますか?setContentView() は円のみを表示します。円を既存のレイアウトに追加する場合は、Activity の XML で ViewGroup に追加する必要があります。

次のようなことができます。

public class AnotherTest extends AppCompatActivity {

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

(res/layout/)anothertest_activity.xml ファイルは次のようになります。

<?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" />

Android Studio では、xml コードのすぐ下に「デザイン」と「テキスト」の 2 つのタブがあります。「テキスト」に切り替えてコードを貼り付け、「デザイン」に戻って要素を配置します。

ビューをドラッグすると、レイアウト XML ファイルが作成されます。アクティビティでは、このファイルをコンテンツ ビューとして設定する必要があります。そうしないと、ビューが表示されません。ただし、次のようにしてビューを動的に追加できます。

<?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>

そしてあなたの活動で:

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

すべてを動的に追加することもできます。

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

ただし、xml レイアウトを使用することを強くお勧めします。Android Layoutsを見てみたいかもしれません

于 2016-05-26T20:26:47.477 に答える