Android 中的 setContentView 和按钮
setContentView and buttons in Android
我有一个 Activity,它有一个按钮,通过代码我画了一个圆,所以我的圆 class 是:
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 代码的正下方是两个选项卡:"Design" 和 "Text"。切换到 "Text" 以粘贴代码,切换回 "Design" 以定位您的元素。
如果您拖动视图,就会得到一个布局 XML 文件。在 Activity 您需要将此文件设置为您的内容视图,否则您将看不到您的视图。但是您可以通过执行以下操作来动态添加视图:
<?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
我有一个 Activity,它有一个按钮,通过代码我画了一个圆,所以我的圆 class 是:
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 代码的正下方是两个选项卡:"Design" 和 "Text"。切换到 "Text" 以粘贴代码,切换回 "Design" 以定位您的元素。
如果您拖动视图,就会得到一个布局 XML 文件。在 Activity 您需要将此文件设置为您的内容视图,否则您将看不到您的视图。但是您可以通过执行以下操作来动态添加视图:
<?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