2012-11-21 11 views
8

मैं चैट ऐप बना रहा हूं। मैं चैट बबल के अलावा टाइमस्टैम्प रखना चाहता हूं। संदेश बाएं (प्राप्त के लिए) और दाएं (भेजे गए के लिए) गठबंधन किया जाएगा।प्रोग्रामेटिक रूप से RelativeLayout toRightOf को toLeftOf

तो, मैं toLeftOf को toRightOf में बदलने का एक तरीका ढूंढ रहा हूं। अभी के लिए, यह इस तरह दिखता है:

Timestamp wrongly aligned

यहाँ प्रत्येक संदेश के लिए मेरी XML कोड है

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

मैं आसपास googling (मैं ArrayAdapter कि इस संभाल है) और इस पाया है, लेकिन ऐसा नहीं करता कार्य:

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

कोई समाधान? धन्यवाद

उत्तर

2

पुनर्लेखन
वर्तमान TextView से विशेषता layout_toRightOf निकालें, फिर दो अलग अलग LayoutParams बनाएँ: toRightOf के लिए एक और toLeftOf के लिए एक। आप अपनी आवश्यकताओं के आधार पर पैरामीटर स्विच कर सकते हैं।

एक विकल्प दो लेआउट के साथ कस्टम एडाप्टर का उपयोग करना है। यह दृष्टिकोण तेजी से होना चाहिए क्योंकि आप रन-टाइम पर लेआउट को फिर से व्यवस्थित नहीं कर रहे हैं, लेकिन दृश्य पुनर्चक्रण में "उत्तर" और "भेजें" लेआउट की दो अलग-अलग सूचियां बनाए रखते हैं।

(एक नोट के रूप में, एपीआई 17 removeRule() शुरू की लेकिन यह बस अभी तक मदद नहीं करेगा।)

+0

मुझे 'removeRule()' विधि नहीं मिल रही है। क्या वह अंतर्निहित है या हमें पहले बनाना होगा? – hrsetyono

+1

क्षमा करें, यह सिर्फ [एपीआई 17 में जोड़ा गया था] (http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html#removeRule%28int%29) ... जो मदद नहीं करता है वर्तमान उपकरण लेकिन मुझे अभी भी विश्वास है कि एकाधिक लेआउट दृष्टिकोण सबसे अच्छा है। – Sam

+0

रुको, क्या आपने दो अलग-अलग लेआउटपैम का उपयोग करने की कोशिश की है? और उन्हें '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

इस प्रयास करें किसी भी view.I से toRightOf और दूर करने के लिए संपत्ति toLeftOf TextView से इन गुणों को हटाने कर रहा हूँ।

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

संबंधित मुद्दे