2016-02-29 267 views
0

我正在阅读一本关于构建名为“Dot Smasher”的应用程序的书。Android Studio:使用布局放置画布和按钮

我决定通过在画布上添加一个按钮来完成任务之一。 我决定使用的LinearLayout,也做了以下内容:

public class MainActivity extends AppCompatActivity { 

private Timer timer; 
private DotSmasherCanvas canvas; 
private DotSmasherTimerTask task; 
private Button button; 
private LinearLayout layout; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setTitle("DotSmasher"); 
    canvas = new DotSmasherCanvas(getBaseContext()); 
    timer = new Timer(); 
    task = new DotSmasherTimerTask(canvas); 
    timer.schedule(task, 0, 1500); 

    button = (Button) findViewById (R.id.button); 

    layout = (LinearLayout) findViewById(R.id.layout); 
    layout.addView(canvas); 

    setContentView(R.layout.activity_main); 



} 
} 

这是XML文件 - activity_main.xml中:

enter image description here

我能得到它的工作,如果我只是做的setContentView(帆布);

但不是上面,我做错了什么?

直到我尝试运行Android Studio时,才会显示错误。

回答

1

你似乎不明白布局是如何工作的。在调用setContentView之前调用findViewById。这是行不通的 - 直到你设置了内容视图,没有地方可以搜索视图。除非你有一个非常动态的布局,否则你不应该混合xml布局和编程视图 - 你的DotSmasherCanvas应该在布局中,或者它们都不应该在xml中(可能是第一个)。