Проблемы с разметкой TextViews в относительном макете (который находится внутри основного относительного макета) - PullRequest
0 голосов
/ 06 марта 2012

Код приведен ниже, но у меня возникли некоторые проблемы с созданием относительного макета (который является дочерним по отношению к linearLayout). Я думаю, что я правильно создаю оба текстовых представления (настраиваю оба идентификатора) и правильно устанавливаю макеты для каждого.

Однако первое текстовое представление не центрируется, а второе текстовое представление не отображается на экране (оно должно быть ниже заголовка меню). Пожалуйста, дайте мне знать, где я иду не так. 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); 

}

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Я думаю, вам нужно обернуть TextView в вертикально ориентированный LinearLayout.Добавьте оба ваших 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 голосов
/ 26 марта 2014

Невозможно комментировать, поэтому его нужно поместить в ответ, несмотря на то, что он фактически не отвечает на ваш вопрос.

Вам не нужно проходить весь этот код только потому, что ваши представления создаются динамически - выможет получить инфлятор и напрямую накачать файл 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);

Это может помочь в решении вашей проблемы, поскольку может помочь определить неправильно вложенное представление или подобное.

...