कोड में RelativeLayout लेआउट params कैसे सेट करें xml में नहीं?


112

उदाहरण के लिए मैं स्क्रीन पर 3 बटन जोड़ना चाहता हूं: एक संरेखित बाएं, एक संरेखित केंद्र, अंतिम एक संरेखित दाएं।

मैं उनके लेआउट को कोड में कैसे सेट कर सकता हूं, अंदर नहीं xml?

जवाबों:


269

बस एक मूल उदाहरण:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
Button button1;
button1.setLayoutParams(params);

params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.RIGHT_OF, button1.getId());
Button button2;
button2.setLayoutParams(params);

जैसा कि आप देख सकते हैं, यह आपको करना है:

  1. कोई RelativeLayout.LayoutParamsवस्तु बनाएँ ।
  2. नियमों का उपयोग addRule(int)या addRule(int, int)सेट करना। पहली विधि का उपयोग उन नियमों को जोड़ने के लिए किया जाता है जिन्हें मूल्यों की आवश्यकता नहीं होती है।
  3. देखने के लिए पैरामीटर सेट करें (इस मामले में, प्रत्येक बटन पर)।

15
यहाँ कुछ समस्याएं हैं। सबसे पहले मैं नहीं देखता कि आप वास्तव में कहां हैं बटन 1 या बटन 2। दूसरे, गतिशील रूप से घोषित किए गए दृश्य (छवि दृश्य, बटन, आदि) -1 की आईडी के साथ त्वरित हो जाते हैं। -1 की एक आईडी एक नियम के लिए काम नहीं करेगी।
क्रेग बी

3
लेआउटपार्म्स जैसी कोई चीज नहीं है। आधार वर्ग वास्तव में है ViewGroup.LayoutParams। यदि आप इसे कम चाहते हैं, तो बस एक आयात जोड़ें जिसमें शामिल हैं RelativeLayout.LayoutParams
क्रिस्टियन

17
    RelativeLayout layout = new RelativeLayout(this);
    RelativeLayout.LayoutParams labelLayoutParams = new RelativeLayout.LayoutParams(
            LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    layout.setLayoutParams(labelLayoutParams);


   // If you want to add some controls in this Relative Layout
    labelLayoutParams = new RelativeLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    labelLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);


    ImageView mImage = new ImageView(this);
    mImage.setBackgroundResource(R.drawable.popupnew_bg);        
    layout.addView(mImage,labelLayoutParams);

    setContentView(layout);

6

कुछ इस तरह..

 RelativeLayout linearLayout = (RelativeLayout) findViewById(R.id.widget43);
                // ListView listView = (ListView) findViewById(R.id.ListView01);

                LayoutInflater inflater = (LayoutInflater) this
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                // View footer = inflater.inflate(R.layout.footer, null);
                View footer = LayoutInflater.from(this).inflate(R.layout.footer,
                        null);
                final RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
                        RelativeLayout.LayoutParams.FILL_PARENT,
                        RelativeLayout.LayoutParams.FILL_PARENT);
                layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1);
footer.setLayoutParams(layoutParams);

4

यदि आप इसे बनाते हैं तो आपके बारे में केवल दृश्य से लेआउट लेआउट कैसे खींचते हैं।

$((RelativeLayout)findViewById(R.id.imageButton1)).getLayoutParams();

0

मुझे उम्मीद है कि नीचे दिया गया कोड मदद करेगा। यह एक EditText और एक लॉग इन बटन बनाएगा। दोनों को अपेक्षाकृत रखा गया। सभी MainActivity.java में किया।

package com.example.atul.allison;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.RelativeLayout;
import android.widget.Button;
import android.graphics.Color;
import android.widget.EditText;
import android.content.res.Resources;
import android.util.TypedValue;     
    public class MainActivity extends AppCompatActivity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //Layout
            RelativeLayout atulsLayout = new RelativeLayout(this);
            atulsLayout.setBackgroundColor(Color.GREEN);

            //Button
            Button redButton = new Button(this);
            redButton.setText("Log In");
            redButton.setBackgroundColor(Color.RED);

            //Username input
            EditText username =  new EditText(this);

            redButton.setId(1);
            username.setId(2);

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

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

            //give rules to position widgets
            usernameDetails.addRule(RelativeLayout.ABOVE,redButton.getId());
            usernameDetails.addRule(RelativeLayout.CENTER_HORIZONTAL);
            usernameDetails.setMargins(0,0,0,50);

            buttonDetails.addRule(RelativeLayout.CENTER_HORIZONTAL);
            buttonDetails.addRule(RelativeLayout.CENTER_VERTICAL);

            Resources r = getResources();
            int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200,r.getDisplayMetrics());
            username.setWidth(px);

            //Add widget to layout(button is now a child of layout)
            atulsLayout.addView(redButton,buttonDetails);
            atulsLayout.addView(username,usernameDetails);

            //Set these activities content/display to this view
            setContentView(atulsLayout);
        }
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.