2012-05-03 53 views
0

我有一個列表視圖來顯示聊天中的消息。我想在左側顯示收到的消息,並在右側顯示已發送的消息。 請考慮對齊包含的視圖是不夠的,因爲我需要顯示條目的背景,並且背景也應該對齊。所以整個條目應該一致。對齊在列表視圖中的條目

有沒有辦法做到這一點?

我試圖使用android:layout_gravity="right"但它沒有工作。

回答

0

您可以嘗試使用LayoutParams以編程方式在您的適配器中設置參數。

喜歡的東西用於發送的消息執行以下操作:

LinearLayout ll = (LinearLayout) findViewById(R.id.MyLinearLayout); 
// need to cast to LinearLayout.LayoutParams to access the gravity field 
LayoutParams params = (LayoutParams)ll.getLayoutParams(); 
params.gravity = Gravity.RIGHT; 
ll.setLayoutParams(params); 

和用於接收的消息的反向(變化從右到左)。

+0

重要的是要添加一個設置主佈局中framelayout的重力。我用了一個稍微不同的方法 – kingston

+0

很高興我能指出你在正確的方向。感謝您發佈您的最終解決方案,很高興知道。 – Barak

0

當然! 你需要一個適配器。在適配器中,當您膨脹ListItem時,只需爲發送和接收的消息添加不同的項目即可!

+0

OK是唯一的方法嗎?我不想使用它,因爲我在該條目中有幾個視圖,我不想複製它們全部:左邊一個,右邊一個 – kingston

+0

我不明白這個問題。你不必複製它們。您必須創建2個xml(ListItems),一個用於接收消息,右對齊,另一個用於發送消息,左對齊。當一個新項目被插入到列表中時,適配器會膨脹一個或另一個項目並設置文本! –

1

我設法用做:

LayoutParams params = (LayoutParams) frame.getLayoutParams(); 
    params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, alignRight?0:1); 
    params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, alignRight?1:0); 
    frame.setLayoutParams(params); 

它是什麼,重要的是我有一個RelativeLayout的範圍內添加一幀爲我的進入,因爲params.addRule僅適用於RelativeLayout的。如果您嘗試對傳遞給bindView的視圖執行相同的操作,則會得到不同的不支持addRule的LayoutParam