2012-11-21 19 views
8

私はチャットアプリを作っています。私はチャットバブルの他にタイムスタンプを入れたい。メッセージは、左(受信用)と右(送信用)に整列されます。プログラムでRelativeLayoutをtoReftOfに変更する

toLeftOftoRightOfに変更する方法を探しています。私の周りグーグルとこれを見つけたのではなく、

Timestamp wrongly aligned

ここでは、各メッセージのための私のXMLコードがあります(私はこれを処理ArrayAdapterを持っている)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/wrapper" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

     <TextView 
      android:id="@+id/bubble" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textColor="#ffffff" /> 

     <TextView 
      android:id="@+id/timeStamp" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerVertical="true" 
      android:layout_toRightOf="@+id/bubble" /> 

</RelativeLayout> 

:今のところ、それはこのようになります仕事:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
if(isReceivedMessage){ 
    params.addRule(RelativeLayout.RIGHT_OF, R.id.bubble); 
} 
else{ 
    params.addRule(RelativeLayout.LEFT_OF, R.id.bubble); 
} 
timeStampTextView.setLayoutParams(params); 

すべての解決策はありますか? toRightOf用とtoLeftOfのための1:ありがとう

答えて

2

書き換え
は、2つの異なるLayoutParamsを作成し、現在のTextViewから属性layout_toRightOfを削除します。必要に応じてパラメータを切り替えることができます。

代わりに、2つのレイアウトのカスタムアダプタを使用することもできます。実行時にレイアウトを再配置するのではなく、ビュー・リサイクラ内の「返信」と「送信」レイアウトの2つの別々のリストを維持するので、このアプローチは高速になります。

(注意点として、API 17はremoveRule()を導入しましたが、これはまだ助けにはなりません。)

+0

私は 'removeRule()'メソッドを見つけることができません。それが組み込まれているのか、それとも最初に作る必要がありますか? – hrsetyono

+1

申し訳ありません、それはちょうど[API 17で追加されました](http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html#removeRule%28int%29)...これは役に立たない現在のデバイス。しかし、私はまだ複数のレイアウトのアプローチが最良だと考えています。 – Sam

+0

待って、2つの異なるLayoutParamsを使ってみましたか? 'tv.setLayoutParams(leftParams)'でそれらを切り替える? – Sam

0

コードの下に使用してください。

RelativeLayout wrapper = (RelativeLayout) findViewById(R.id.wrapper); 
if(isReceivedMessage){ 
    wrapper.setGravity(Gravity.RIGHT); 
} 
else{ 
    wrapper.setGravity(Gravity.LEFT); 
} 
+0

そのコードはチャットのバブルを整列させることですか?私はすでにそれをした – hrsetyono

+0

はい私はこのコードをテストしています。 – Nikhil

+0

実際に私はタイムスタンプの位置を変更する方法を探しています。私は既にバブルを整列させるコードを持っています – hrsetyono

10

のTextViewからこれらのプロパティを削除しています任意のview.IからtoRightOftoLeftOfプロパティを削除するには、これを試してみてください。

TextView header2=(TextView) findViewById(R.id.text_view_header_shoppinglist); 
     RelativeLayout.LayoutParams mLayoutParams2=(RelativeLayout.LayoutParams)header2.getLayoutParams(); 
     mLayoutParams2.addRule(RelativeLayout.LEFT_OF,0); 
     mLayoutParams2.addRule(RelativeLayout.RIGHT_OF,0); 
+1

ありがとうございます。私は上記の答えでこれを解決しましたが、次回はこれを試してみます – hrsetyono

関連する問題