Как установить параметры макета RelativeLayout в коде, а не в xml
например, я хочу добавить 3 кнопки на экране один выровнять влево, один выровнять центр, последний выровнять вправо
Как я могу установить их макет в коде, а не в XML?
5 ответов:
простой пример:
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);
как вы можете видеть, это то, что вам нужно сделать:
- создать
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);
что-то вроде этого..
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);
Как насчет того, чтобы просто вытащить параметры макета из самого представления, если вы его создали.
$((RelativeLayout)findViewById(R.id.imageButton1)).getLayoutParams();
Я надеюсь, что приведенный ниже код поможет. Он создаст EditText и кнопку входа в систему. Оба размещены относительно. Все сделано в MainActivity.Ява.
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); } }