カスタムの線形レイアウトに新しい textView を追加したいと考えています。しかし、線形レイアウトが描画される前に、右側のボタンと重ならずに収まるかどうかを確認し、重なる場合は、描画する前に textView でテキストをカットしたいと考えています。
私のレイアウト
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="60dp" >
<ImageButton
android:id="@+id/b_settings"
android:layout_width="50dp"
android:layout_height="44dp"
android:layout_alignParentRight="true"
android:layout_margin="0dp"
android:src="@drawable/watch_settings2x" />
<Button
android:id="@+id/b_test"
android:layout_width="50dp"
android:layout_height="44dp"
android:layout_toLeftOf="@id/b_settings"
/>
<com.client.views.Breadcrump
android:id="@+id/ll_breadcrump"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:orientation="horizontal" />
</RelativeLayout>
私のフローは次のようになります。まず、新しい TextView をカスタム ビューに追加します。
this.addView(TextView, position);
カスタムビューが描画される前に呼び出される次のものを実装しましたGlobalLayoutListener
が、幅はすでに利用可能です:
@Override
public void onGlobalLayout() {
cutBreadcrump();
}
次に、まずパンくずリスト (カスタム ビュー) に使用可能なスペースを取得します。
int fragmentWidth = getView().getWidth();
int widthButtons = mIBSettings.getWidth() + mBTest.getWidth();
int spaceBreadcrump = fragmentWidth - widthButtons;
次に、新しく追加された TextView から Chars を切り取り、新しい幅を確認します
CharSequence text = textView.get(0).getText();
text = text.subSequence(0, text.length() - 1);
textView.get(0).setText(text);
しかし、これは私の問題です。テキストを変更しても幅は変わりません。
mElements.get(0).getWidth();
TextView の幅を取得する方法も試しましたpaint.measureText(string);
が、常に長すぎました。たぶん、この方法は私が期待したものとは違うことをします...
つまり、私の問題は、ビューを描画する前にテキストを変更した後、ビューの新しい幅を取得する方法です。