内部に円だけを含むカスタム ビューがあります。その寸法に問題があります。
と の両方を無効onSizeChanged()
にしましonMeasure()
たが、残念ながら で何かが欠けていonMeasure()
ます。このビューは実質的に単なる円なので、オーバーロードgetSuggestedMinimumHeight()
しgetSuggestedMinimumWidth()
て、両方を円の半径に戻すようにしました。アクティビティの他のコンポーネントを更新することを決定するまで、すべてが正常に機能しているように見えました。
ビューが配置されているアクティビティでa TextView
(または a )のテキストを更新すると、 (更新のたびに) ビューが小さくなり、との両方が呼び出されます。Button
onMeasure()
onSizeChanged()
これが私のonMeasure()
方法です。私の質問は、なぜ常に同じように動作しないのですか?
@Override
protected int getSuggestedMinimumHeight() {
return (int) (mCircleRadius + mCircleStrokeWidth/2);
}
@Override
protected int getSuggestedMinimumWidth() {
return (int) (mCircleRadius + mCircleStrokeWidth/2);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Log.d("SIZES", "called onMeasure()");
int minw = getPaddingLeft() + getPaddingRight() + getSuggestedMinimumWidth();
int minh = getSuggestedMinimumHeight() + getPaddingBottom() + getPaddingTop();
setMeasuredDimension(minw, minh);
}
レイアウトの XML は次のとおりです。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/com.nhasu"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<com.nhasu.ProgressCircleTimer
android:id="@+id/progcircle_smallBreaks"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:padding="10dp"
custom:circle_radius="300dp" />
<Button
android:id="@+id/btn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_centerInParent="true"
android:onClick="onStartClicked"
android:text="@string/btn_start"
android:textSize="40sp" />
</RelativeLayout>
のテキストをButton
単純なで編集することに注意してくださいButton.setText()
。