在居中的自定义视图周围创建边框并删除无用的 LinearLayout?

Posted

技术标签:

【中文标题】在居中的自定义视图周围创建边框并删除无用的 LinearLayout?【英文标题】:Create border around a centered custom view and removing useless LinearLayout? 【发布时间】:2012-08-14 12:26:02 【问题描述】:

目前我有以下布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/editorRootView"
    android:layout_
    android:layout_
    android:orientation="vertical" >

    <RelativeLayout android:id="RL1"
            android:layout_
            android:layout_
            android:layout_weight="1">
        <!-- LinearLayout needed so we have an border outside of the EditorView -->
        <LinearLayout android:id="LL1"
            android:background="@drawable/border"
            android:layout_centerInParent="true"
            android:layout_
            android:layout_ >

            <xenolupus.EditorView
                android:id="@+id/editorView"
                android:layout_
                android:layout_ />
        </LinearLayout>
    </RelativeLayout>
    <LinearLayout
        android:layout_
        android:layout_
        android:layout_margin="10dip"
        android:orientation="horizontal" >
        <Button
            android:id="@+id/otherImage"
            android:layout_
            android:layout_
            android:text="@string/cardEditor_OtherImageButtonText" />
        <Button
            android:id="@+id/next"
            android:layout_
            android:layout_
            android:text="@string/cardEditor_NextButtonText" />
    </LinearLayout>
</LinearLayout>

还有用到的@drawable/border:

<?xml version="1.0" encoding="UTF-8"?>
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid 
        android:color="#FFFFFF" />
    <stroke 
        android: 
        android:color="#FF0099CA" />
    <padding 
        android:left="10dip" 
        android:top="10dip" 
        android:right="10dip"
        android:bottom="10dip" />
    <corners 
        android:radius="5dip" />
</shape>

但是 Eclipse 警告我(带有 ! 的黄色三角形),RelativeLayout RL1 中的 LinearLayout LL1 没有用,应该删除:

这个LinearLayout布局或者它的RelativeLayout parent是没用的; 将背景属性转移到另一个视图。

由于需要 RelativeLayout 使 EditorView 居中,因此我尝试删除 LinearLayout LL1 并将 LinearLayout LL1 的 android:background 添​​加到 EditorView。但是这样做会让边框消失在 EditorView 的内容后面。

还有其他方法可以在 EditorView 之外添加边框还是应该忽略警告?

问候 异种狼疮

【问题讨论】:

【参考方案1】:
    yes it's right, put the background inside your <xenolupus.EditorView 
        like this    
<xenolupus.EditorView
                    android:background="@drawable/border"
                    android:padding="10dp"
                    android:id="@+id/editorView"
                    android:layout_
                    android:layout_ />

    and then  add gravity to it parent the RL1 layout  

    > android:gravity="center"

【讨论】:

【参考方案2】:

View 默认可以绘制背景。如果你正确地开发了EditorView,你可以直接在 XML 中设置背景和填充:

<xenolupus.EditorView
    android:id="@+id/editorView"
    android:layout_
    android:layout_
    android:background="@drawable/border"
    android:padding="10dp" />

“正确开发”是指您的视图计算它的高度宽度(在onMeasureonSizeChanged 方法中)使用 填充。换句话说:在计算大小时,您使用了getPadding*() 方法。

注意

别忘了致电super.onDraw()

【讨论】:

以上是关于在居中的自定义视图周围创建边框并删除无用的 LinearLayout?的主要内容,如果未能解决你的问题,请参考以下文章

iOS绘制带有底部边框的自定义视图

如何以编程方式绘制边框并在 UIImageview 周围的文字后将其删除?

Java - 从图像周围的边框创建形状

带有底部边框的自定义 UITextView

删除以编程方式创建的自定义按钮的边框

如何缩放视图并将自定义边框保持在原始大小\缩放?