在经典在线教程中找到构建 Android 项目的正确文件
Finding the Right Files to Build Android Project in Classic Online Tutorial
我在学习本教程的第 7 周时遇到问题,https://web.stanford.edu/class/cs193a/lectures.shtml。在第 7 周,当我 运行 在 Android studio 上构建时,只有 .java 文件显示有问题。
我是否需要 xml 文件?为什么不能显示它们,因为在前几周还显示了 xml 文件。
我打开了 Targets 应用程序的 zip 文件并在 Targets/app/src/main/res/layout 中找到了以下 xml 文件,
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".TargetsActivity">
<com.example.stepp.targets.TargetsView
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
但是当我将它复制到粘贴 .java 文件的项目中时,ExampleView.java 和 TargetsView.java、
/*
* CS 193A, Winter 2015, Marty Stepp
* This class is a graphical view of a basic example of 2D graphics.
*/
package com.example.stepp.targets;
import android.content.Context;
import android.graphics.*;
import android.util.AttributeSet;
import android.view.View;
public class ExampleView extends View {
public ExampleView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/*
* This method draws some shapes and text on the view.
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawARGB(255, 255, 90, 90);
Paint aqua = new Paint();
aqua.setARGB(255, 0, 80, 220);
canvas.drawRect(new RectF(10, 30, 300, 700), aqua);
canvas.drawOval(new RectF(400, 50, getWidth(), getHeight()), aqua);
Paint font = new Paint();
font.setARGB(255, 0, 0, 0);
font.setTypeface(Typeface.create(Typeface.SERIF, Typeface.BOLD_ITALIC));
font.setTextSize(40);
canvas.drawText("CS 193A is great", 80, 200, font);
}
}
和
/*
* CS 193A, Winter 2015, Marty Stepp
* This class is a graphical view of a drawing of a red/white target figure.
*/
package com.example.stepp.targets;
import android.content.Context;
import android.graphics.*;
import android.util.AttributeSet;
import android.view.View;
public class TargetsView extends View {
public TargetsView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/*
* This method draws the target oval shapes on the view.
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint red = new Paint();
red.setARGB(255, 255, 0, 0);
Paint white = new Paint();
white.setARGB(255, 255, 255, 255);
int w = getWidth();
int h = getHeight();
for (int i = 0; i < 5; i++) {
canvas.drawOval(new RectF(w*i/10, h*i/10, w*(10-i)/10, h*(10-i)/10), (i % 2 == 0 ? red : white));
}
}
}
我不明白为什么这不起作用,因为同样的方法在前几周起作用。非常感谢您的帮助。我也不明白为什么需要两个不同的活动 ExampleView 和 TargetsView。
我在本教程的后几周遇到了同样的问题,因为我看不到在哪里可以找到正确的 java 和 xml 文件。
这个问题似乎是那些遵循 android 应用程序开发
重要教程的人的常见错误
尝试使用整个 Targets.zip。
您在问题中包含的两个 class 是 class extends View
。它们只是 UI 组件,不会自行发生任何事情。
这两个 class 可以包含在布局 xml 中或由 Activity class 使用(以编程方式构建)。正如您在找到的布局 xml 中看到的那样,它包含一个名为 <com.example.stepp.targets.TargetsView ... />
的标记,这意味着此布局将在其中包含一个 TargetView。
Activity class 实际上是协调 UI 组件和逻辑的人。在你的 Targets.zip 中,你也有一个 TargetsActivity.java
,这是一个 Acitivity class。它尝试通过在 onCreate()
方法中调用 setContentView(...)
来获取 R.layout.activity_targets
并将其设置为内容视图。
src/main 终于有 AndroidManifest.xml
了。可以看到在<activity ...> ... </activity>
节点中,TargetsActivity被指定为launcheractivity,也就是说app启动时,这个Acitivityclass会是第一个activity 开始。
我在学习本教程的第 7 周时遇到问题,https://web.stanford.edu/class/cs193a/lectures.shtml。在第 7 周,当我 运行 在 Android studio 上构建时,只有 .java 文件显示有问题。
我是否需要 xml 文件?为什么不能显示它们,因为在前几周还显示了 xml 文件。
我打开了 Targets 应用程序的 zip 文件并在 Targets/app/src/main/res/layout 中找到了以下 xml 文件,
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".TargetsActivity">
<com.example.stepp.targets.TargetsView
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
但是当我将它复制到粘贴 .java 文件的项目中时,ExampleView.java 和 TargetsView.java、
/*
* CS 193A, Winter 2015, Marty Stepp
* This class is a graphical view of a basic example of 2D graphics.
*/
package com.example.stepp.targets;
import android.content.Context;
import android.graphics.*;
import android.util.AttributeSet;
import android.view.View;
public class ExampleView extends View {
public ExampleView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/*
* This method draws some shapes and text on the view.
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawARGB(255, 255, 90, 90);
Paint aqua = new Paint();
aqua.setARGB(255, 0, 80, 220);
canvas.drawRect(new RectF(10, 30, 300, 700), aqua);
canvas.drawOval(new RectF(400, 50, getWidth(), getHeight()), aqua);
Paint font = new Paint();
font.setARGB(255, 0, 0, 0);
font.setTypeface(Typeface.create(Typeface.SERIF, Typeface.BOLD_ITALIC));
font.setTextSize(40);
canvas.drawText("CS 193A is great", 80, 200, font);
}
}
和
/*
* CS 193A, Winter 2015, Marty Stepp
* This class is a graphical view of a drawing of a red/white target figure.
*/
package com.example.stepp.targets;
import android.content.Context;
import android.graphics.*;
import android.util.AttributeSet;
import android.view.View;
public class TargetsView extends View {
public TargetsView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/*
* This method draws the target oval shapes on the view.
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint red = new Paint();
red.setARGB(255, 255, 0, 0);
Paint white = new Paint();
white.setARGB(255, 255, 255, 255);
int w = getWidth();
int h = getHeight();
for (int i = 0; i < 5; i++) {
canvas.drawOval(new RectF(w*i/10, h*i/10, w*(10-i)/10, h*(10-i)/10), (i % 2 == 0 ? red : white));
}
}
}
我不明白为什么这不起作用,因为同样的方法在前几周起作用。非常感谢您的帮助。我也不明白为什么需要两个不同的活动 ExampleView 和 TargetsView。
我在本教程的后几周遇到了同样的问题,因为我看不到在哪里可以找到正确的 java 和 xml 文件。
这个问题似乎是那些遵循 android 应用程序开发
重要教程的人的常见错误尝试使用整个 Targets.zip。
您在问题中包含的两个 class 是 class extends View
。它们只是 UI 组件,不会自行发生任何事情。
这两个 class 可以包含在布局 xml 中或由 Activity class 使用(以编程方式构建)。正如您在找到的布局 xml 中看到的那样,它包含一个名为 <com.example.stepp.targets.TargetsView ... />
的标记,这意味着此布局将在其中包含一个 TargetView。
Activity class 实际上是协调 UI 组件和逻辑的人。在你的 Targets.zip 中,你也有一个 TargetsActivity.java
,这是一个 Acitivity class。它尝试通过在 onCreate()
方法中调用 setContentView(...)
来获取 R.layout.activity_targets
并将其设置为内容视图。
src/main 终于有 AndroidManifest.xml
了。可以看到在<activity ...> ... </activity>
节点中,TargetsActivity被指定为launcheractivity,也就是说app启动时,这个Acitivityclass会是第一个activity 开始。