2012-07-04 89 views
1

我嘗試將我的自定義視圖與EditView疊加在一起,獲得了不同的成功。在自定義視圖上疊加編輯視圖

的解決方案需要結合我的自定義視圖不會被畫布上繪製時所執行的各種計算的事實。計算,如鍛鍊中心X和Y cordinates,帆布等

這些計算的尺寸將被用來在屏幕上定位EditText

到目前爲止,我已經想通了,一個RelativeLayout是在考慮到疊加的路要走。

最好的解決方案至今(這是不理想的)是創建一個自定義RelativeLayout,見下圖:

public class MyCustomRL extends RelativeLayout { 

    public MyCustomRL(Context context) { 
     super(context); 
     initView(context); 
    } 

    public MyCustomRL(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initView(context); 
    } 

    public MyCustomRL(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     initView(context); 
    } 

    protected void initView(Context context){ 

     LayoutInflater inflater = LayoutInflater.from(context); 
     SeekBar_Speedometer v_speedometer = (SeekBar_Speedometer) inflater.inflate(R.layout.rl_custom_speedometer, this, false); 

     addView(v_speedometer); 

     RelativeLayout rl_comment = (RelativeLayout) inflater.inflate(R.layout.rl_edittext_comment, this, false); 

     EditText edit = (EditText) rl_comment.findViewById(R.id.edittext_comment); 
     edit.setText("Text altered at runtime"); 

     rl_comment.setX(112); 
     rl_comment.setY(117); 
     //Log.v("WHATEVER","X: "+v_speedometer.centerX); // = 0 
     //rl_comment.setX(v_speedometer.centerX); 
     //rl_comment.setY(v_speedometer.centerY); 

     addView(rl_comment); 
    } 
} 

這本質上工作時,EditText定位在那些靜止座標。不過,我希望EditText被放置在v_speedometer.centerXv_speedometer.centerY座標處,但它們爲0,因爲v_speedometer視圖尚未繪製出來!

我應該怎麼做?

回答

0

如果您沒有找到還沒有任何解決方案,你可以寫,這將作爲您的 里程錶hasDrawn監聽器的接口。這意味着只要您的速度計將被繪製,它就會向實現您的EditText的類發佈通知,然後再次在您的CustomView或UI中設置它們的座標。