android - Android 中的 setContentView 和按钮

标签 android layout geometry setcontentview

我有一个 Activity,它有一个按钮,通过代码我画了一个 Circle,所以我的 Circle 类是:

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

}

}

我的 Activity 代码是:

public class AnotherTest extends AppCompatActivity {

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

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

   }

但是当我调用 setContentView 时,按钮似乎被删除了。显示圆圈并保留按钮的任何提示?

最佳答案

您提到的按钮在您 Activity 的布局 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 代码的正下方是两个选项卡:“设计”和“文本”。切换到“文本”以粘贴代码,切换回“设计”以定位您的元素。

如果拖动 View ,就会得到一个布局 XML 文件。在 Activity 中,您需要将此文件设置为您的内容 View ,否则您将看不到您的 View 。但是您可以通过执行以下操作来动态添加 View :

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

在您的 Activity 中:

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

关于android - Android 中的 setContentView 和按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37470275/

相关文章:

android - 将 TextView 的各行设置为不同的宽度

C++ 点在浮点坐标精度中的旋转

java - 从几何组合的矩形创建直线多边形

android - 一个发行版中的 Linux 程序\游戏可以在另一个 Linux 发行版上运行吗?

java - Android开发中的类调用

android - 拨号时没有 FCM 诊断 *#*#426#*#*

python - 为什么我的凸包算法返回错误的点?

android - android中合理的纹理大小

android - 在相对布局中将控件彼此相邻对齐

android - 如果屏幕太小, View 应该滚动