以编程方式将属性AlignParentRight设置为RelativeLayout中的按钮不起作用?

Mok*_*pps 17 android android-layout android-button android-relativelayout

我尝试以编程方式将属性AlignParentRight设置为RelativeLayout中的按钮,但程序崩溃时出现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);
Run Code Online (Sandbox Code Playgroud)

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

更新解决方案:

这段代码适合我:

// 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);
Run Code Online (Sandbox Code Playgroud)

Muk*_*oni 14

更换

RelativeLayout.LayoutParams layoutParams =(RelativeLayout.LayoutParams)b.getLayoutParams();
Run Code Online (Sandbox Code Playgroud)

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.MATCH_PARENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
Run Code Online (Sandbox Code Playgroud)

  • @gumuruh添加代码如下:layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); (5认同)

njz*_*zk2 8

当你打电话时b.getLayoutParams(),b不在布局中.因此,它没有layoutparams(另外,它不会知道你在此时期待RelativeLayout.LayoutParams).

您需要创建一个新的LayoutParams实例,就像您为TextView所做的那样.