Относительный макет (с двумя текстовыми представлениями внутри него) внутри линейного макета работает - но я не знаю почему - PullRequest
0 голосов
/ 07 марта 2012

Я изо всех сил пытался заставить это работать весь день и наконец заставил это работать, устанавливая некоторые поля (см. Код), но я не знаю, почему это работает

    //should this be a try/catch?
    Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/Kefa.ttc");

    LinearLayout sampleLinearLayout = new LinearLayout(this);
    LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,  LayoutParams.MATCH_PARENT);
    sampleLinearLayout.setOrientation(LinearLayout.VERTICAL);
    sampleLinearLayout.setBackgroundColor(Color.WHITE);
    sampleLinearLayout.setLayoutParams(layout);

    TextView menuItemTitle = new TextView(this);
    menuItemTitle.setId(2);
    menuItemTitle.setText("All You Can Eat\t\t   $13.99");
    menuItemTitle.setTextSize(35);
    menuItemTitle.setBackgroundColor(Color.TRANSPARENT);
    menuItemTitle.setTypeface(tf);
    menuItemTitle.setTextColor(Color.argb(255, 77, 30, 16));

    RelativeLayout.LayoutParams menuItemTitleParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    menuItemTitleParams.addRule(RelativeLayout.CENTER_HORIZONTAL);

    //****why does setting the TOP margin work??****
    menuItemTitleParams.setMargins(0, 50, 0, 0);
    menuItemTitle.setLayoutParams(menuItemTitleParams);

    TextView menuItemDesc = new TextView(this);
    menuItemDesc.setText("All you can ribs, chicken, pork and sides you can stomach to eat\n\tAlso includes dessert!");
    menuItemDesc.setTextSize(15);
    menuItemDesc.setBackgroundColor(Color.TRANSPARENT);
    menuItemDesc.setTextColor(Color.argb(255, 77, 30, 16));
    menuItemDesc.setLayoutParams(menuItemTitleParams);

    RelativeLayout.LayoutParams menuItemDescParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    menuItemDescParams.addRule(RelativeLayout.CENTER_HORIZONTAL);

    //If i comment out the line of code below, the margin above still places the text
    //below the title.
    menuItemDescParams.addRule(RelativeLayout.BELOW, menuItemTitle.getId());

    //##menuItemTitle.setLayoutParams(menuItemDescParams);
    menuItemDesc.setLayoutParams(menuItemDescParams);


    RelativeLayout relativeLayout = new RelativeLayout(this);
    relativeLayout.setBackgroundColor(Color.TRANSPARENT);
    RelativeLayout.LayoutParams subMenuLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT,  LayoutParams.WRAP_CONTENT);
    subMenuLayoutParams.setMargins(400, 0, 400, 0);
    relativeLayout.setLayoutParams(subMenuLayoutParams);

    relativeLayout.addView(menuItemTitle);
    relativeLayout.addView(menuItemDesc);

    sampleLinearLayout.addView(relativeLayout);

    setContentView(sampleLinearLayout);

Если я не делаюустановите поля для верхней части menuItemTitle TextView menuItemDesc Textview текст лежит прямо поверх текста menuTitle на экране.

  1. Почему моего правила menuItemDescParams для НИЖЕ здесь недостаточно?
  2. Если нас не волнует # 1 (что мне нравится), почему расширяется верхняя часть поля menuItemTitleпереместить менюItemDesc ниже менюItemTitle textview ??Если я закомментирую строку кода для НИЖЕ, установка поля все равно вступит в силу.Если подумать, я думаю, что № 1 очень важно

1 Ответ

0 голосов
/ 19 марта 2012

Я решил это сам, как отмечено в комментариях

...