RelativeLayout,匹配父包含不需要的填充权吗?

时间:2014-04-26 13:34:09

标签: android android-layout intellij-idea android-custom-view

我有一个自定义标题栏(类似于操作栏)。

<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@drawable/bg_header">

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/ibSlider"
            android:src="@drawable/ic_drawer"
            android:background="@color/transparent"
            android:layout_marginLeft="@dimen/side_margin"
            android:contentDescription="@string/general_content_description"
            android:layout_centerVertical="true"/>

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="@string/header_branding"
            android:id="@+id/tvAppName"
            android:layout_toRightOf="@+id/ibSlider"
            android:gravity="center_vertical"
            android:layout_marginLeft="@dimen/side_margin"
            style="@style/branding_orange"/>

        <ProgressBar
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:id="@+id/pbLoading"
            android:layout_alignParentRight="true"
            android:indeterminate="true"
            android:layout_marginRight="@dimen/side_margin"
            android:layout_centerVertical="true"/>
</RelativeLayout>

当我在我的活动中添加此自定义视图时,有一个填充权,我不知道来自哪里!我在视图中添加了绿色背景,以便找到我在谈论的地方。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <view
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:id="@+id/headerBar"
            android:background="@color/green"
            class="com.kamalan.widget.HeaderBar"/>

    <View
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/headerBar"/>
</RelativeLayout>

这是我的HeaderBar的代码。

public class HeaderBar extends RelativeLayout {

    private static final String TAG = "HeaderBar";

    private Context mContext;
    private ProgressBar progressBar;
    private ImageButton ibMenuSlider;

    public HeaderBar(Context context) {
        super(context);
        this.mContext = context;
        init();
    }

    public HeaderBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.mContext = context;
        init();
    }

    public HeaderBar(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        this.mContext = context;
        init();
    }

    private void init() {

        LayoutInflater mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        RelativeLayout view = (RelativeLayout) mInflater.inflate(R.layout.widget_headerbar, null);
        addView(view);

        progressBar = (ProgressBar) view.findViewById(R.id.pbLoading);
        ibMenuSlider = (ImageButton) view.findViewById(R.id.ibSlider);
    }
...
}

图1显示了类标题(第一个xml代码)的预览,并在第二个图像添加到我的活动时显示。我不知道绿色填充来自哪里!任何想法将不胜感激。感谢。

enter image description here enter image description here

2 个答案:

答案 0 :(得分:0)

问题是我用作标题背景的图像。不知道为什么它适用于第一张图像但不适用于第二张图像。正如鲍勃在评论中所说,也许活动正在搞乱或主题有错误。

无论如何,我通过不使用图像修复了问题:)

对于其他人的参考,我改变了下面的xml标题,我可以用这种方式修复问题。

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="@dimen/header_bar_height"
        android:background="@color/gray">

        <ImageButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/ibSlider"
            android:src="@drawable/ic_drawer"
            android:background="@color/transparent"
            android:layout_marginLeft="@dimen/side_margin"
            android:contentDescription="@string/general_content_description"
            android:layout_centerVertical="true"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="@string/header_branding"
            android:id="@+id/tvAppName"
            android:layout_toRightOf="@+id/ibSlider"
            android:gravity="center_vertical"
            android:layout_marginLeft="@dimen/side_margin"
            style="@style/branding_orange"/>

        <ProgressBar
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:id="@+id/pbLoading"
            android:layout_alignParentRight="true"
            android:indeterminate="true"
            android:layout_marginRight="@dimen/side_margin"
            android:layout_centerVertical="true"/>

        <View
                android:layout_width="match_parent"
                android:layout_height="2dp"
                android:background="@color/header_divider"
                android:layout_alignParentBottom="true"/>
</RelativeLayout>

答案 1 :(得分:0)

我也面临同样的问题但是当我尝试自定义Actionbar时我获得了成功。由于缺少drawable和字符串资源,我无法解决您的问题所以请提供这个的zip以便我可以直接看到....