我有一個列表視圖來顯示聊天中的消息。我想在左側顯示收到的消息,並在右側顯示已發送的消息。 請考慮對齊包含的視圖是不夠的,因爲我需要顯示條目的背景,並且背景也應該對齊。所以整個條目應該一致。對齊在列表視圖中的條目
有沒有辦法做到這一點?
我試圖使用android:layout_gravity="right"
但它沒有工作。
我有一個列表視圖來顯示聊天中的消息。我想在左側顯示收到的消息,並在右側顯示已發送的消息。 請考慮對齊包含的視圖是不夠的,因爲我需要顯示條目的背景,並且背景也應該對齊。所以整個條目應該一致。對齊在列表視圖中的條目
有沒有辦法做到這一點?
我試圖使用android:layout_gravity="right"
但它沒有工作。
您可以嘗試使用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);
和用於接收的消息的反向(變化從右到左)。
當然! 你需要一個適配器。在適配器中,當您膨脹ListItem時,只需爲發送和接收的消息添加不同的項目即可!
OK是唯一的方法嗎?我不想使用它,因爲我在該條目中有幾個視圖,我不想複製它們全部:左邊一個,右邊一個 – kingston
我不明白這個問題。你不必複製它們。您必須創建2個xml(ListItems),一個用於接收消息,右對齊,另一個用於發送消息,左對齊。當一個新項目被插入到列表中時,適配器會膨脹一個或另一個項目並設置文本! –
我設法用做:
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
重要的是要添加一個設置主佈局中framelayout的重力。我用了一個稍微不同的方法 – kingston
很高興我能指出你在正確的方向。感謝您發佈您的最終解決方案,很高興知道。 – Barak