それは私の最初の質問です。
カスタム コンポーネントを作成しました。下部にRelativeLayout
aがあり、その上に 2 つあり、ヒストグラムの 2 列のクリック可能な要素として機能します。バーの高さを設定するには、コンテナの高さからラベルの高さを引いたものとして、「利用可能な高さ」を取得します。TextView
ImageView
onLayout()
@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 が変更されました。もう一度クリックすると、変更が表示されます。
面白いことに、ツールの変更から「ビュー階層の読み込み」を行っても(エミュレーター上で) 表示されます!! 何が起こるのですか?変ですか?それが機能するように、コードでそれを行いたいです!
同様の質問は見つかりませんでした。ありがとう。