0

それは私の最初の質問です。

カスタム コンポーネントを作成しました。下部にRelativeLayoutaがあり、その上に 2 つあり、ヒストグラムの 2 列のクリック可能な要素として機能します。バーの高さを設定するには、コンテナの高さからラベルの高さを引いたものとして、「利用可能な高さ」を取得します。TextViewImageViewonLayout()

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    super.onLayout(changed, l, t, r, b);
    mAvailHeight = getHeight()-findViewById(R.id.label).getHeight(); // it works

次に、レイアウト パラメータとして ImageView に割り当てます (0.-1. の値を掛けます)。

    View bar = findViewById(R.id.bigBar);
    RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) bar.getLayoutParams();
    rlp.height = Math.round((float)mAvailHeight * mBigBarHeight);
}

変数 (0.-1.) は、次のmBigBarHeight関数で設定できます。

public void setBigBarHeight(float value, float max) {
    mBigBarHeight = value / max;    
    requestLayout(); //
    invalidate();    // do these help? i find no difference
}

今。これらの「HistogramBar」の1つを追加onCreate()して高さとラベルを設定すると、すべてが期待どおりに機能します。後で変更しようとする場合は、onClickSomething と言ってください:

bar.setBigBarHeight(25, 100);
bar.setSmallBarHeight(50, 100);
bar.setLabel("jjk");

ラベルのみが変更されます。Hierarchy Viewer で確認したところ、実際には LayoutParams が変更されました。もう一度クリックすると、変更が表示されます。

面白いことに、ツールの変更から「ビュー階層の読み込み」を行っても(エミュレーター上で) 表示されます!! 何が起こるのですか?変ですか?それが機能するように、コードでそれを行いたいです!

同様の質問は見つかりませんでした。ありがとう。

4

1 に答える 1

1

ツールから階層をロードすると、パフォーマンスを測定するために再レイアウト/再描画が発生します。必要なときに requestLayout() を呼び出していない可能性があります。

于 2010-11-11T05:41:49.457 に答える