2012-05-03 24 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); 

し、受信したメッセージのリバース(LEFTに変更しRIGHT)。

+0

メインレイアウト内のフレームレイアウトに対して重力を設定する必要があることを追加することが重要です。私は若干異なる方法を使用しました – kingston

+0

うれしい私は正しい方向にあなたを指すことができます。最終的なソリューションを投稿していただきありがとうございます。 – Barak

0

もちろん! アダプタが必要です。アダプタでは、ListItemを拡張するときに、送信メッセージと受信メッセージ用に異なるアイテムを膨張させるだけです!

+0

これは唯一の方法ですか?エントリーにいくつかのビューがあり、それらのすべてを複製したくないので、私はそれを使用したくなかった:左のものと右のもの – kingston

+0

私は問題を理解していない。あなたはそれらを複製する必要はありません。 2つのxml(ListItems)を作成する必要があります.1つは受信メッセージ用、右側は整列化、もう1つは送信メッセージ用、左揃えです。新しい項目がリストに挿入されると、アダプタは1つまたは別の項目を膨張させ、テキストを設定します。 –

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); 

を何が重要なのは、私はparams.addRuleだけRelativeLayoutのために利用可能であるので、私のエントリのRelativeLayout内のフレームを追加しなければならなかったということです。 bindViewに渡されたビューで同じことをしようとすると、addRuleをサポートしない別のLayoutParamを取得します