0

カスタムの線形レイアウトに新しい 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);が、常に長すぎました。たぶん、この方法は私が期待したものとは違うことをします...

つまり、私の問題は、ビューを描画する前にテキストを変更した後、ビューの新しい幅を取得する方法です。

4

1 に答える 1