1

カスタム ビューにEditView.

ソリューションには、カスタム ビューがキャンバスの描画時に実行されるさまざまな計算を行うという事実を組み込む必要があります。中心の X 座標と Y 座標、キャンバスの寸法などの計算。

これらの計算はEditText、画面上に を配置するために使用されます。

これまでのところRelativeLayout、オーバーレイに関しては a が進むべき道であることがわかりました。

これまでの最善の解決策 (理想的ではありません) は、 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はそれらの静的座標に配置されます。v_speedometer.centerXただし、EditTextを座標に配置したいのですが、ビューがまだ描画されていないv_speedometer.centerYため、それらは 0 です!!!v_speedometer

これをどのように行う必要がありますか?

4

1 に答える 1

0

まだ解決策が見つからない場合は、速度計の hasDrawn リスナーとして機能するインターフェイスを作成できます。これは、速度計が描画されるたびに、 EditText を実装するクラスに通知を投稿し、 CustomView または UI で座標を再度設定することを意味します。

于 2012-07-04T15:05:07.047 に答える