在RelativeLayout中以编程方式将属性AlignParentRight设置为button不起作用?

我尝试以编程方式将属性AlignParentRight设置为RelativeLayout中的button,但程序崩溃与NullPointerException。 在这里我的代码:

//add horizontal realative layout RelativeLayout layouth = new RelativeLayout(this); layouth.setLayoutParams(new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); //add textview for label TextView t = new TextView(this); t.setText(d.getName()); t.setTextSize(25); t.setId(2); t.setLayoutParams(new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); //add button Button b = new Button(this); b.setText(d.getName()); RelativeLayout.LayoutParams layoutParams =(RelativeLayout.LayoutParams)b.getLayoutParams(); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); layoutParams.addRule(RelativeLayout.LEFT_OF, 2); b.setLayoutParams(layoutParams); //add textview and button to horizontal linear layout layouth.addView(t); layouth.addView(b); //add horizontal linear layout to vertical linear layout layoutv = (LinearLayout) findViewById(R.id.ProjectViewLinearID); layoutv.addView(layouth); 

我的问题在哪里? 该错误发生在程序行layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

更新解决scheme:

这段代码适用于我:

 // Creating a new RelativeLayout RelativeLayout layouth = new RelativeLayout(this); // Defining the RelativeLayout layout parameters. // In this case I want to fill its parent RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); // Creating a new TextView TextView tv = new TextView(this); tv.setText(d.getName()); tv.setTextSize(25); //add button Button b = new Button(this); b.setText(d.getName()); // Defining the layout parameters of the TextView RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); // Setting the parameters on the TextView tv.setLayoutParams(lp); b.setLayoutParams(lp); // Adding the TextView to the RelativeLayout as a child layouth.addView(tv); layouth.addView(b); 

Solutions Collecting From Web of "在RelativeLayout中以编程方式将属性AlignParentRight设置为button不起作用?"

当您调用b.getLayoutParams() ,b不在布局中。 因此,它没有一个layoutparams(加上,它不会知道你期待的RelativeLayout.LayoutParams在这一点上)。

您需要创build一个新的LayoutParams实例,就像您为TextView所做的一样。

更换

 RelativeLayout.LayoutParams layoutParams =(RelativeLayout.LayoutParams)b.getLayoutParams(); 

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