Bagaimana cara mengatur parameter tata letak RelativeLayout dalam kode bukan dalam xml?

112

Misalnya saya ingin menambahkan 3 tombol di layar: satu rata kiri, satu rata tengah, yang terakhir rata kanan.

Bagaimana cara mengatur tata letaknya dalam kode, bukan dalam xml?

Qing
sumber

Jawaban:

269

Hanya contoh dasar:

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

Seperti yang Anda lihat, inilah yang harus Anda lakukan:

  1. Buat RelativeLayout.LayoutParamsobjek.
  2. Gunakan addRule(int)atau addRule(int, int)untuk menetapkan aturan. Metode pertama digunakan untuk menambahkan aturan yang tidak membutuhkan nilai.
  3. Atur parameter ke tampilan (dalam hal ini, ke setiap tombol).
Cristian
sumber
15
Ada beberapa masalah di sini. Pertama-tama saya tidak melihat di mana Anda sebenarnya memberi contoh button1 atau button2. Kedua, Views yang dideklarasikan secara dinamis (ImageView, Buttons, dll.) Dibuat dengan id -1. Id -1 tidak akan berfungsi untuk aturan.
Craig B
3
Tidak ada yang namanya LayoutParams. Kelas dasar sebenarnya ViewGroup.LayoutParams. Jika Anda ingin lebih pendek, cukup tambahkan impor yang menyertakan RelativeLayout.LayoutParams.
Cristian
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);
Amit Thaper
sumber
6

Sesuatu seperti ini..

 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);
Rohit Mandiwal
sumber
4

Bagaimana jika Anda hanya menarik parameter tata letak dari tampilan itu sendiri jika Anda membuatnya.

$((RelativeLayout)findViewById(R.id.imageButton1)).getLayoutParams();
Chidi Michael Ekeocha
sumber
0

Saya harap kode di bawah ini akan membantu. Ini akan membuat EditText dan tombol Log In. Keduanya ditempatkan secara relatif. Semua selesai di 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);
        }
    }
Atul Chavan
sumber