如何检查动态视图是否与另一个视图重叠?

时间:2013-05-07 11:29:32

标签: android android-layout

我想将新的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();
            }

然后我首先获得可用于Breadcrump的空间(自定义视图)

 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();

我还尝试了paint.measureText(string);方法来获取TextView的宽度,但总是很长。也许这种方法与我的期望有所不同......

所以我的问题是如何在绘制视图之前更改视图后获取视图的新宽度

1 个答案:

答案 0 :(得分:0)

好吧我终于这样做了,我覆盖了我的观点的onLayout方法。因此,当调用该方法时,它会将可用空间保存在视图的静态属性中。 当我添加一个新的TextView时,我借助于此检查所有字符串的总和: measure text return pixels based

我用一个小小的algorythm切割我的琴弦,直到所有TextView都适合空间。之后我画了TextViews。