我正在尝试在视图中绘制Canvas,并在我在XML文件中定义的一些TextView下显示此视图。 每次我测试应用程序时,它都不会在设备上启动。
然而,部件本身有效:
当我将setContentView(R.layout.activity_main);
中的onCreate()
更改为setContetView(new CustomView(this));
时,它可以正常工作,但当然没有textView。
我的 activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<TextView
android:id="@+id/sampleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Some Text"/>
<com.example.simon.drawtest.CustomView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/sampleText"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
我的 MainActivity.java :
package com.example.simon.drawtest;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
我的 CustomView.java :
package com.example.simon.drawtest;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
public class CustomView extends View {
private Paint paint;
public CustomView(Context context) {
super(context);
paint = new Paint();
paint.setColor(Color.GRAY);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.BLUE);
canvas.drawCircle(200, 200, 100, paint);
}
}
答案 0 :(得分:1)
显示您的整个activity_main.xml
...
两个View
都应包含在例如FrameLayout
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/sampleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Some Text"/>
<com.example.simon.drawtest.CustomView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/sampleText"
android:layout_alignParentBottom="true"/>
</FrameLayout>
编辑:好的,所以你有RelativeLayout
..还要注意,Android 5.0引入了elevation attribute,你可能会遇到一些问题,例如HERE
另外......您的TextView
在XML中是第一位的,因此它将在您的自定义视图之前绘制(如果未设置高程,则按顺序绘制)
下面...... android:layout_below="@+id/sampleText"
表示垂直轴下方。尝试删除此行
编辑:用户在评论中发布异常堆栈跟踪,所以下面我正在为他的案例粘贴正确答案(复制评论):
你的错误堆栈说
引起:java.lang.NoSuchMethodException: [类android.content.Context,接口 android.util.AttributeSet]
你只有一个带Context的构造函数 只有,系统还需要一个附加的AttributeSet。查看 THIS问题&amp;回答,为您的CustomView应用适当的构造函数