如何在代码中设置RelativeLayout布局参数而不是xml
例如,我想在屏幕上添加3个button,一个alignment左边,一个alignment中心,最后一个alignment右边
我如何在代码中设置他们的布局,而不是在XML中?
只是一个基本的例子:
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);
正如你所看到的,这是你必须做的:
- 创build一个
RelativeLayout.LayoutParams
对象。 - 使用
addRule(int)
或addRule(int, int)
来设置规则。 第一种方法用于添加不需要值的规则。 - 将参数设置为视图(在这种情况下,为每个button)。
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);
如果你只是从视图本身拉取布局参数,如果你创build它。
$((RelativeLayout)findViewById(R.id.imageButton1)).getLayoutParams();
我希望下面的代码将有所帮助。 它将创build一个EditText和一个loginbutton。 两者都相对放置。 全部在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); } }