2013-06-19 4 views
2

This question похож на мой, но конструктивного ответа там нет.setGravity не работает для RelativeLayout

Я пытаюсь сделать простой переключение вида заголовка в списке. Я хочу, чтобы глава первой секции находился слева, а второй - справа. Расположение этой точки зрения головы является RelativeLayout следующим образом:

<?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 имеет установите значение. Но это не изменилось. Должен ли я выполнить некоторые другие действия после того, как я установил параметр layout? Потому что, если я установил значение силы тяжести в RIGHT в условии if, оно не отображается на моем экране. Но если я прокручу вниз и снова, он изменился на правую сторону, но все же не так, как я ожидал, различную позицию для каждого раздела. Все секции в этом случае пошли направо ...

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(); 
} 
+0

Что делает ваш 'заголовок'? –

+0

@GokhanArik Извините, я не дал понять, посмотрю мои обновления. Заголовок, который я считаю, является RelativeLayout. – zoujyjs

+0

Используете ли вы этот макет в каждой строке «ListView»? Также как выглядит 'headerView'? – Luksprog

ответ

2

Обратите внимание, что RelativeLayout не имеет свойство ориентации; удалите это из своего XML.

Однако, я не понимаю, зачем вам нужен родитель RelativeLayout для заголовка; почему бы не использовать LinearLayout? Дайте эту вертикальную ориентацию, скажем, и установите ее силу тяжести, как и вы.

Если вы можете полностью отказаться от родительского макета, тем лучше. У этого есть только один ребенок.

+0

Кроме того, 'android: layout_gravity =" top "' не принадлежит [параметрам RelativeLayout] (http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html) – mdelolmo

+0

Это еще один пример. – SK9

+1

После изменения этого параметра на LinearLayout и придания ему горизонтальной ориентации ** проблема решена. – zoujyjs

Смежные вопросы