setGravity不适用于RelativeLayout

时间:2013-06-19 03:29:35

标签: android android-layout

This question与我的相似,但没有建设性的答案。

我正在尝试在列表中进行标题视图的简单切换。我希望第一部分的头部在左边,而第二部分的头部在右边。此头视图的布局是一个相对布局,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/location_list_pinned_header"
    android:layout_width="fill_parent"
    android:layout_height="32dip"
    android:background="#505050"
    android:clickable="true"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/zlocation_list_header_text"
        android:layout_width="40dip"
        android:layout_height="32dip"
        android:layout_gravity="top"
        android:gravity="center"
        android:paddingTop="2dip"
        android:textColor="#000000"
        android:textSize="16sp" />

</RelativeLayout>

我在java代码中所做的是:

    RelativeLayout header = (RelativeLayout) headerView.findViewById(R.id.location_list_pinned_header);
    if ( section%2 == 0 ) {
        ((TextView) headerView.findViewById(id))
                .setText(title);//set the section title, may be like "Feb" "Jan"
        header.setGravity(Gravity.LEFT);//I am sure it is been set, I see the mGravity of RelativeLayout changed in debug mode
    }
    else {
        ((TextView) headerView.findViewById(id))
                .setText(title);
        header.setGravity(Gravity.RIGHT);
    }

正如我在评论中所说,我确信setGravity已设置了值。但它没有改变。在设置布局参数后,我应该执行其他操作吗?因为如果我在if子句中将重力设置为RIGHT,则它不会显示在我的屏幕中。但是,如果我再向下滚动,它会变为右侧,但仍然不如我所料,每个部分的位置不同。本案中的所有部分都是正确的......

headerView是一个包含RelativeLayout的视图:

mDisPlay.setPinnedHeaderView(LayoutInflater.from(mContext).inflate(
                    R.layout.zlocation_list_section_header, mDisPlay, false));

将设置标题视图,mDisPlay是列表,就像我之前说过的那样。此代码中使用的布局显示在第一段代码中。以下是方法setPinnedHeaderView

public void setPinnedHeaderView(View view) {
    mHeaderView = view;
    if (mHeaderView != null) {
        setFadingEdgeLength(0);
    }
    System.out.println("setPinnedHeaderView");

    requestLayout();
}

1 个答案:

答案 0 :(得分:2)

请注意RelativeLayout没有方向属性;从XML中删除它。

但是,我不明白为什么你需要一个RelativeLayout父项作为标题;为什么不使用LinearLayout?比如说,给这个垂直方向,并按原样设置它的重力。

如果你可以完全取消父布局那么多。这个只有一个孩子。