1

我尝试用EditView.

该解决方案需要结合这样一个事实,即我的自定义视图会在绘制画布时执行各种计算。计算,例如计算中心 X 和 Y 坐标、画布尺寸等。

这些计算将用于EditText在屏幕上定位。

到目前为止,我已经发现 aRelativeLayout是关于覆盖的方法。

迄今为止最好的解决方案(这并不理想)是创建一个 custom 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尚未绘制视图!!!!

我应该怎么做?

4

1 回答 1

0

如果您还没有找到任何解决方案,您可以编写一个界面来充当您的速度计 hasDrawn 侦听器。这意味着无论何时绘制您的速度计,它都会向实现您的 EditText 的类发布通知,然后在您的 CustomView 或 UI 中再次设置它们的坐标。

于 2012-07-04T15:05:07.047 回答