0

Я пытаюсь выровнять по правому краю элементы ListView, но они не сдвинутся с левой стороны. Атрибуты gravity и layout_gravity не работают.LinearLayout, используемый как макет элемента в ListView, не будет направо

Этот код также выравнивает макет справа в коде XML, но не во время выполнения при заполнении ListView.

Вот XML я использую, который также использует 9 патч изображение в качестве фона в LinearLayout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:minHeight="0dp" 
    android:background="@drawable/my_9Patch_image" 
    android:id="@+id/contentLayout" 
    android:orientation="horizontal" 
    android:layout_gravity="right" 
    android:gravity="right" 

    > 

    <TextView 
     android:layout_width="wrap_content" 
     android:maxWidth="330dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="right" 
     android:gravity="right" 
     android:textColor="#e5e5e5" 
     android:minHeight="0dp" 
     android:singleLine="false" 
     android:textSize="16dp"> 


    </TextView> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingLeft="10dp" 
     android:textColor="#e5e5e5" 
     android:minHeight="0dp" 
     android:textSize="10dp" 
     android:layout_gravity="left|bottom" 
     android:gravity="left|bottom" 

     /> 

</LinearLayout> 

Я также попытался установить Params в методе GetView моего адаптера с помощью:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
      params.gravity = Gravity.RIGHT; 
      mLinearLayout.setLayoutParams(params); 

Заранее благодарим за любую помощь.

+0

Вы пытаетесь описать то, что вы хотите добиться? –

+0

Спасибо за ответ. Я создаю приложение чата, для входящих сообщений сообщения идут слева, а отправленные сообщения идут справа. Каждый макет сообщения содержит сообщение и отметку времени. Я использую два разных макета XML и раздуваю соответствующий макет (макет входящего или исходящего сообщения) в методе getView адаптера. Спасибо –

+0

нет. Я спрашиваю о макете, которую вы хотите увидеть? вы хотите иметь TextView слева, а другой - вправо. Это правда? –

ответ

0

Я хотел бы посмотреть на rowbuttonlayout.xml от http://www.vogella.com/tutorials/AndroidListView/article.html

В принципе, вы пытаетесь изменить вес предметов, но вы пытаетесь форму снаружи в виде списка. Вероятно, он пытается придерживаться, перемещая весь вид списка вправо, но просмотр списка занимает все пространство, поэтому вы даже не замечаете его. Если вы хотите, чтобы отдельные элементы были оставлены в порядке, вам нужно будет сделать пользовательские ячейки, которые оставлены обоснованными, которые сделаны, когда вы хотите, чтобы выровнялись по левому краю, или создали свою собственную ячейку, и оставили необходимые средства в этой ячейке, когда это необходимо.

+0

Спасибо. Я дам ему прочитать и отвести его. Но можете ли вы пояснить, что вы имеете в виду, обоснованно, пожалуйста? –

+0

В том же аспекте, что текстовый документ оправдан. С какой стороны текст цепляется или если он центрирован. – DasScooter

+0

Когда я включил 'show layout bounds', используя dev. opts Я мог видеть, что строки ListView занимают столько места, сколько обернутый контент в представлениях, а не весь родитель. Когда вы говорите, что пользовательская ячейка, вы имеете в виду строку? Я попробовал это, как с LinearLayout, так и с RelativeLayout. Он работал только при добавлении другого родительского контейнера. Я посмотрел на ссылку, которую вы мне тоже отправили, похоже, они выравнивают представления, содержащиеся в родительском праве справа, это работает для меня, но родительский контейнер - это то, что не движется вправо или влево, без обертка, которая является проблемой. Спасибо. –

0

Предварительное решение (Я вернусь). Это кажется неэффективным, но вы можете добавить еще один LinearLayout для переноса другого LinearLayout. Возьмите контейнер LinearLayout и установите как высоту, так и ширину в match_parent и поместите атрибут тяжести вправо. Затем добавьте 9 патч-изображения к вложенному LinearLayout, а не к нему на уровне представления LinearLayout родительского контейнера и измените его высоту и ширину на wrap_content.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/contentLayout" 
      android:orientation="horizontal" 
      android:gravity="right" 
       > 

      <LinearLayout android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:background="@drawable/purple_right_2" 
      > 


    <TextView 
     android:id="@+id/message_outgoing" 
     android:layout_width="wrap_content" 
     android:maxWidth="330dp" 
     android:layout_height="wrap_content" 
     android:textColor="#e5e5e5" 
     android:minHeight="0dp" 
     android:singleLine="false" 
     android:textSize="16dp"> 

    </TextView> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingLeft="10dp" 
     android:id="@+id/clockView" 
     android:textColor="#e5e5e5" 
     android:minHeight="0dp" 
     android:textSize="10dp" 
     android:layout_gravity="left|bottom" 
        /> 

    </LinearLayout> 
    </LinearLayout>