2012-03-06 21 views
0

コードは以下ですが、相対レイアウト(linearLayoutの子)を作成する際に問題があります。私は正しく(両方のIDを設定する)正しくそれぞれのlayoutparamsを設定する両方のtextviewsを作成していると思う。相対レイアウト(メインの相対レイアウト内にあります)内にTextViewをレイアウトする際の問題

ただし、最初のtextviewは中央に配置されず、2番目のtextviewは画面に描画されません(menuTitleの下に表示されます)。ここで私がどこに間違っているのか教えてください。 LinearLayout、コード内のRelativeLayoutは、メインのRelativeLayout(setContentView行に記載されている)の内側にあります。すべての私のカスタムクラスは、単純に描画メソッドをオーバーライドして、ビューの周りに白い枠線を描画します。私はこれらのサブクラスでレイアウトパラメータを全く変更していません。(私はいくつかの人々がこれをやっている問題を抱えていることに気付きました)。

これらは動的に作成されるため、XMLの代わりにプログラムによるルートが使用されます。とにかく事前に助けてくれてありがとう!

CustomRelativeLayout subMenuLayout = new CustomRelativeLayout(this); 
    subMenuLayout.setBackgroundColor(Color.TRANSPARENT); 
    RelativeLayout.LayoutParams subMenuLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
    subMenuLayoutParams.addRule(RelativeLayout.RIGHT_OF, sideMenu.getId()); 
    subMenuLayoutParams.setMargins(0, 0, 200, 0); 
    subMenuLayout.setLayoutParams(subMenuLayoutParams); 

    TextView menuItemTitle = new CustomTextView(this); 
    menuItemTitle.setText("All You Can Eat"); 
    menuItemTitle.setTextSize(30); 
    menuItemTitle.setBackgroundColor(Color.TRANSPARENT); 
    menuItemTitle.setTextColor(Color.WHITE); 
    menuItemTitle.setId(2); 

    RelativeLayout.LayoutParams menuItemTitleParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
    menuItemTitleParams.addRule(RelativeLayout.CENTER_HORIZONTAL); 
    menuItemTitleParams.setMargins(0, 0, 0, 15); 
    menuItemTitle.setLayoutParams(menuItemTitleParams); 

    TextView menuItemDesc = new CustomTextView(this); 
    menuItemDesc.setText("All you can ribs, chicken, pork and sides you can stomach to eat\nAlso includes dessert!"); 
    menuItemDesc.setTextSize(15); 
    menuItemDesc.setBackgroundColor(Color.TRANSPARENT); 
    menuItemDesc.setTextColor(Color.WHITE); 
    menuItemDesc.setId(3); 

    RelativeLayout.LayoutParams menuItemDescParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
    menuItemDescParams.addRule(RelativeLayout.BELOW, menuItemTitle.getId()); 
    menuItemDesc.setLayoutParams(menuItemDescParams); 

    subMenuLayout.addView(menuItemTitle); 
    subMenuLayout.addView(menuItemDesc); 

    RelativeLayout screenLayout = new RelativeLayout(this); 
    screenLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
    screenLayout.setBackgroundResource(R.drawable.body_bkgd); 
    screenLayout.addView(sideMenu); 
    screenLayout.addView(subMenuLayout); 

    setContentView(screenLayout); 

} 

答えて

1

私はあなたが垂直に配向さLinearLayoutであなたのTextView秒を包み込むする必要があると思います。 TextViewの両方をRelativeLayoutの代わりにLinearLayoutに追加し、RelativeLayoutLinearLayoutを追加します。ここでは例です:

LinearLayout linearLayout = new LinearLayout(this); 
linearLayout.setOrientation(LinearLayout.VERTICAL); 

TextView menuItemTitle = new CustomTextView(this); 
menuItemTitle.setText("All You Can Eat"); 
menuItemTitle.setTextSize(30); 
menuItemTitle.setBackgroundColor(Color.TRANSPARENT); 
menuItemTitle.setTextColor(Color.WHITE); 

LinearLayout.LayoutParams menuItemTitleParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
menuItemTitleParams.gravity = Gravity.CENTER_HORIZONTAL; 
menuItemTitle.setLayoutParams(menuItemTitleParams); 

TextView menuItemDesc = new CustomTextView(this); 
menuItemDesc.setText("All you can ribs, chicken, pork and sides you can stomach to eat\nAlso includes dessert!"); 
menuItemDesc.setTextSize(15); 
menuItemDesc.setBackgroundColor(Color.TRANSPARENT); 
menuItemDesc.setTextColor(Color.WHITE); 
menuItemDesc.setLayoutParams(menuItemTitleParams); 

linearLayout.addView(menuItemTitle); 
linearLayout.addView(menuItemDesc); 
+0

2つのtextViewが中央に配置されていない点を除いて、動作していたようです。それらは依然としてRelativeLayoutに左揃えされています。それは正確に中心にされるべきであると思われます... – cspam

+0

あなたはscreenLayout.addView(linearLayout、Gravity.CENTER_HORIZONTAL)のような何かをすると言っていましたか? – cspam

+0

最後のコメントを残してはいけないと思います。「あなたが望む位置パラメータを使ってRelativeLayoutにLinearLayoutを追加してください。再度ありがとう – cspam

0

コメントすることができませんので、これは実際にあなたの質問に答えていないにも関わらず、その答えに配置する必要があります。

あなたは、あなたの意見は、動的に作成されているという理由だけで、すべてのそのコードを通過する必要はありません - あなたは、インフレータのホールドを取得し、直接layout.xmlファイルを膨らませることができます。

LayoutInflater inflater = LayoutInflater.fromContext(getContext()) 
View layout = inflater.inflate(R.layout.some_layout, parentView, false); 

// Any other set up here. 

parentView.addView(layout); 

これは役立つかもしれません間違ったネストされたビューなどを識別するのに役立つので、問題が発生します。