Android更改布局背景错误的大小

时间:2014-04-18 10:47:15

标签: android android-layout

我正在开发简单的WYSIWYG编辑器,并且在更改背景时面临错误的布局调整

所以我有一个带有虚线背景的布局,以突出显示所选元素和内部视图。当用户点击布局时,逻辑是改变背景。

示例:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_height="wrap_content"
              android:layout_width="wrap_content"
              android:orientation="vertical"
              android:gravity="center_horizontal"
        >
    <LinearLayout
            android:id="@+id/layout_id_title_preview"
            style="@style/SelectedDashedLayoutWrapWidth">
        <TextView
                android:id="@+id/text_logo_title"
                android:text="@string/default_title"
                android:layout_gravity="center_horizontal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
    </LinearLayout>
</LinearLayout>

样式是:

<style name="SelectedDashedLayout">
    <item name="android:background">@drawable/highlighter_stroke_transpwhite</item>
    <item name="android:orientation">vertical</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:minWidth">@dimen/preview_highlighted_item_minwidth</item>
    <item name="android:minHeight">@dimen/preview_highlighted_item_minheight</item>
    <item name="android:paddingLeft">@dimen/preview_highlighted_item_padding_leftright</item>
    <item name="android:paddingRight">@dimen/preview_highlighted_item_padding_leftright</item>
    <item name="android:paddingTop">@dimen/preview_highlighted_item_padding_topbottom</item>
    <item name="android:paddingBottom">@dimen/preview_highlighted_item_padding_topbottom</item>
</style>

<style name="SelectedDashedLayoutWrapWidth" parent="@style/SelectedDashedLayout">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
</style>

<style name="SelectedDashedLayoutMatchWidth" parent="@style/SelectedDashedLayout">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
</style>

我发现的可怕的事情是,如果你将View.OnClickListener添加到仪表板布局 - 它可能会强制重绘这个布局和他的邻居(!!!)。在此重绘期间,虚线大小的布局有时会破坏并返回到这些布局的最小尺寸(请参见屏幕截图)。 有趣的是,它会破坏背景高度,但不会破坏宽度。并非总是如此。

所以这是如何:

enter image description here

在onClick事件之后:

enter image description here

我还尝试将形状可绘制替换为颜色 - 具有相同的结果

更新

这是OnClick的完成方式:

View highlightedParentTitle = mPreviewLayout.findViewById(R.id.layout_id_title_preview);
highlightedParentTitle.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // doesn't matter what is here, it could be even empty
    }
});

但最令人惊讶的是,OnClick甚至可能是空的 - 它仍然会强制错误地重绘元素。

0 个答案:

没有答案