我正在尝试创建一个ImageView
,其上面有TextView
的视图。
我一直试图在此找到任何好的例子,所以我希望有人可以告诉我我做错了什么或在哪里寻找例子。我见过http://developer.android.com/guide/topics/ui/custom-components.html#compound,但只是真正描述了最低要求。
我发现了一些像Creating Compound Controls With Custom XML Attributes这样的东西,但我的设置有点不同。
我的代码在下面,它扩展了LinearLayout
,我不确定这是否还有可行的方法。布局中没有显示任何内容。
ImageWithOverlay
public class ImageWithOverlay extends LinearLayout {
ImageView image;
TextView text;
public ImageWithOverlay(Context context) {
super(context);
setupDisplay(context);
}
public ImageWithOverlay(Context context, AttributeSet attrs) {
super(context, attrs);
setupDisplay(context);
}
public ImageWithOverlay(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setupDisplay(context);
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
image.draw(canvas);
text.draw(canvas);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
private void setupDisplay(Context context) {
image = new ImageView(context);
image.setImageResource(R.drawable.flowers);
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
image.setLayoutParams(lp);
text = new TextView(context);
text.setText("testing");
lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
text.setLayoutParams(lp);
}
}
status.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.package.blah.ImageWithOverlay
android:id="@+id/imageWithOverlay1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
</com.package.blah.ImageWithOverlay>
</RelativeLayout>
答案 0 :(得分:1)
使用RelativeLayout而不是LinearLayout,这样您就可以将文本放在图像上。
它们没有出现的原因是它们没有使用addView添加,所以在设置每个的LayoutParams之后调用它。
删除onDraw()调用,除非您明确请求,否则不会将其用于ViewGroups。一旦添加了视图,它们将被自动绘制。