2012-09-20 4 views
17

プログラムでAlignParentRight属性をRelativeLayoutのボタンに設定しようとしましたが、プログラムがNullPointerExceptionでクラッシュしました。ここに私のコード:RelativeLayoutの属性AlignParentRightをボタンにプログラムで設定していませんか?

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

私の問題はどこですか?

このコードは、私の作品:エラーがSOLUTION WITHプログラム行layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

UPDATEで発生しますが、b.getLayoutParams()を呼び出すと

// 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); 
+2

を置き換える次の:'のparamsは、親のためのものですので、 'LinearLayout.LayoutParams'を必要とlayouth'レイアウトは 'LinearLayout'(' layoutv')です – zapl

+0

lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); –

答えて

8

、bがレイアウトされていません。したがって、layoutparamsはありません(さらに、この時点でRelativeLayout.LayoutParamsが必要であることはわかりません)。

TextViewの場合と同様に、新しいLayoutParamsインスタンスを作成する必要があります。

+0

ありがとう、それは私の問題を解決しました。私は更新されたコードで私の最初の投稿を更新します。 –

+0

np。また、レイアウトコメントにレイアウトを追加するためのlayoutparamsに何か問題があります – njzk2

15

あなたは `ClassCastException`を取得する必要があり、既に観測誤差のほかに

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

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

コードに追加するalignParentRight/alignParentLeftはどうですか?@MukeshSoni? – gumuruh

+5

@ gumuruh次のようにコードに追加します:layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); – Toni

+0

大丈夫です。それはコードです:D – gumuruh

関連する問題