2012-06-21 169 views
0

我正在嘗試創建一個視圖,其上有一個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> 

回答

1

使用RelativeLayout的,而不是一個LinearLayout中,這將允許您在圖像上放置文本。

他們沒有出現的原因是他們沒有使用addView添加,所以在設置每個人的LayoutParams後調用它。

刪除onDraw()調用,這不會用於ViewGroups,除非您明確要求它做。一旦添加了視圖,它們將自動繪製。

+0

太棒了。完美工作。 – Kirk