2013-09-02 7 views
14

में प्रोग्रामेटिक रूप से गुरुत्वाकर्षण सेट करने के लिए कैसे एक relativelayout में प्रोग्रामिंग में गुरुत्वाकर्षण सेट करने के लिए कैसे। मैं नाम chat_viewer_message.xml के रूप में नीचे के साथ एक एक्सएमएल लेआउट:एक relativelayout

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/background" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingRight="4dip" 
    android:paddingBottom="4dip" 
    android:gravity="left" 
    android:background="@drawable/chat_bg_in"> 

    <ImageView 
     android:id="@+id/avatar" 
     android:layout_width="32dip" 
     android:layout_height="32dip" 
     android:layout_marginLeft="4dip" 
     android:src="@drawable/avatar_1_1" 
     /> 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@id/avatar" 
     android:paddingLeft="4dip" 
     /> 

</RelativeLayout> 

और कोड प्रोग्रामिंग में दृश्य के रूप में नीचे है:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     final int type = getItemViewType(position); 
     final View view; 
     if (convertView == null) { 
      final int resource = R.layout.chat_viewer_message; 
      view = activity.getLayoutInflater() 
        .inflate(resource, parent, false); 
      if (type == TYPE_MESSAGE) 
       ((TextView) view.findViewById(R.id.text)).setTextAppearance(
         activity, appearanceStyle); 
     } else 
      view = convertView; 



     final MessageItem messageItem = (MessageItem) getItem(position); 
     String name; 
     final String account = messageItem.getChat().getAccount(); 
     final String user = messageItem.getChat().getUser(); 
     final String resource = messageItem.getResource(); 
     final boolean incoming = messageItem.isIncoming(); 
     final String server_host = view.getResources().getString(
       R.string.server_host); 
     if (isMUC) { 
      name = resource; 
     } 


     if (incoming) { 
      view.setBackgroundResource(R.drawable.chat_bg_in); 
     } else { 
      // I WANT TO GRAVITY TO RIGHT. HOW TO CODE? THANKS 
      view.setBackgroundResource(R.drawable.chat_bg_out); 
     } 

     return view; 
} 

आईडी = पृष्ठभूमि, डिफ़ॉल्ट के साथ relativelayout पर गुरुत्वाकर्षण देखें गुरुत्वाकर्षण बाएं है, तो मैं चाहता हूं कि! relativelayout पर मूल्य गुरुत्वाकर्षण आने के बजाय दाईं ओर बाएं हो।

धन्यवाद।

उत्तर

19

कास्ट view, इस मामले RelativeLayout में, और उस पर setGravity(int) का उपयोग करें:

if (incoming) { 
    view.setBackgroundResource(R.drawable.chat_bg_in); 
} else { 
    // I WANT TO GRAVITY TO RIGHT. HOW TO CODE? THANKS 
    view.setBackgroundResource(R.drawable.chat_bg_out); 

    ((RelativeLayout) view).setGravity(Gravity.RIGHT); 
} 

सावधानी का एक शब्द (दस्तावेज़ों से):

Note that since RelativeLayout considers the positioning of each child relative to one another to be significant, setting gravity will affect the positioning of all children as a single unit within the parent. This happens after children have been relatively positioned.

+0

त्रुटि नहीं: लेकिन प्रभाव को प्रभावित नहीं करते हैं। अभी भी बाईं ओर धन्यवाद। –

0

आप उपयोग कर सकते हैं:

RelativeLayout.LayoutParams paramas = new RelativeLayout.LayoutParams(); 
params.gravity = Gravity.RIGHT; 
view.setLayoutParams(params); 

गुरुत्वाकर्षण मापदंडों यू इस जाँच कर सकते हैं के बारे में अधिक जानकारी के लिए: कंटेनर लेआउट के लिए Gravity

+0

त्रुटि: जावा।lang.ClassCastException: android.widget.AbsListView $ लेआउट पैराम्स को android.widget पर नहीं डाला जा सकता है। रिलेवेटिवआउट $ लेआउट पैराम –

+0

आप गलत लेआउट को बढ़ा रहे हैं: अंतिम int संसाधन = R.layout.chat_viewer_message; आपकी ListView आइटम लेआउट आईडी पृष्ठभूमि है, जो सापेक्ष लयआउट है? – Jilberta

+0

हल, पृष्ठभूमि मैं टेक्स्टव्यू पर जाता हूं, कौन सी आईडी टेक्स्ट –

0

उपयोग विधि, setGravity (int) http://developer.android.com/reference/android/widget/RelativeLayout.html#setGravity(int)

यह RelativeLayout.LayoutParams का उपयोग करके बच्चे के गुरुत्वाकर्षण स्थापित करने के लिए बेहतर तरीका है। इसे देखें। How to programmatically set the layout_align_parent_right attribute of a Button in Relative Layout?

9

RelativeLayout में प्रोग्रामेटिक रूप से गुरुत्वाकर्षण सेट करने के दो मुख्य तरीके हैं। आप या तो सभी बच्चे के विचारों (setGravity(int)) के लिए गुरुत्वाकर्षण सेट कर सकते हैं या गुरुत्वाकर्षण को व्यक्तिगत रूप से सेट कर सकते हैं (params.addRule(int))। नोट: ये विधियां LinearLayout एस के लिए उपलब्ध नहीं हैं।

सभी बच्चों के लिए गुरुत्वाकर्षण सेट करने के लिए:

MyView myView = findViewById(R.id.myView); 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
myView.setLayoutParams(params); 

सूत्रों का कहना है:

RelativeLayout relativeLayout = findViewById(R.id.myRelativeLaout); 
relativeLayout.setGravity(Gravity.CENTER); 

के भीतर एक RelativeLayout एक दृश्य के लिए गुरुत्वाकर्षण सेट करने के लिए

5

यह मेरे मामले के लिए पूरी तरह से काम करता है:

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 

    layoutParams.topMargin = 700;//in my case 
    layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);//in my case 
    varButton.setLayoutParams(layoutParams); 
+0

addRule सही तरीका है, एक आकर्षण की तरह काम किया, धन्यवाद – Mercury

0

चैट लेआउट का निर्माण और यह प्रोग्राम के रूप में जोड़ तोड़ & sDirectionHasmap प्रत्येक संदेश की दिशा में शामिल है।

if (sDirectionHashMap.get(idsList.get(position)).equals("incoming")) { 
      holder.messageLayout.setGravity(Gravity.LEFT); 
     } else { 
      holder.messageLayout.setGravity(Gravity.RIGHT); 
     } 
संबंधित मुद्दे