2012-03-06 117 views
0

代碼如下,但我在創建相對佈局(這是一個linearLayout的子項)時遇到了一些問題。我認爲我正確創建了兩個文本瀏覽器(設置了兩個ID)並正確設置了每個佈局文件。在相對佈局內佈局TextView的問題(在主佈局相對佈局中)

但是,第一個textview沒有居中,第二個textview沒有被繪製到屏幕上(它應該在menuTitle下面)。請讓我知道我在哪裏錯了。代碼中的LinearLayout,RelativeLayout在一個主要的RelativeLayout中(在setContentView行中註明)。我所有的自定義類都只是重寫draw方法在視圖周圍繪製白色邊框。我不會在這些子類中完全改變佈局參數(我注意到有些人在這樣做時遇到了問題)。

作爲一個方面說明 - 這些將被動態創建,這就是編程路由而不是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 s都添加到LinearLayout而不是RelativeLayout,然後將LinearLayout添加到RelativeLayout並帶有所需的位置參數。這裏有一個例子:

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

似乎工作,除了兩個textViews不居中。它們仍然被RelativeLayout左對齊。它似乎應該居中正確... – cspam 2012-03-06 18:11:07

+0

你是否要做類似screenLayout.addView(linearLayout,Gravity.CENTER_HORIZONTAL)? – cspam 2012-03-06 18:14:33

+0

沒有最後的評論 - 我想你的意思是「然後添加LinearLayout與RelativeLayout與你想要的位置參數」意味着設置一個位置像素?再次感謝 – cspam 2012-03-06 18:32:27

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

這可能有助於與您的問題,因爲它可能有助於確定錯誤的嵌套視圖或類似。