Как я могу добавить представления динамически в относительном макете или в любом макете - PullRequest
0 голосов
/ 09 марта 2020

Ну, моя проблема немного сложна (для меня). Предположим, у меня есть RelativeLayout (или любой другой Layout по мере необходимости).

Теперь я делаю View, как TextView. (Несколько View). Эти View будут включать следующие характеристики, которые я дам из кода java.

  1. Я хочу добавить View к макету в определенной позиции c.
  2. Два или более View могут перекрываться (как на следующем рисунке)
  3. Это своего рода AddView (дочерний элемент, positionX, ширина, высота); Я знаю, что нет такого метода. но мне нужен один.

где positionX будет целым числом, определяющим, где View будет установлен в Layout сверху.

Теперь я хочу добавить те View до Layout, как на следующей фотографии.

enter image description here

(Все View будут прямоугольного angular размера; извините за плохое редактирование.)

Как я могу это сделать? Мне очень нужно решение.

Надеюсь, я объяснил свою проблему с моим бедным Энгли sh :(

Заранее спасибо <3 <3 </p>

Ответы [ 4 ]

1 голос
/ 09 марта 2020

Вы также можете использовать макет FlexBox , предоставленный Google, для динамического добавления вида. Вы можете проверить это Среднее сообщение для ясного понятия о Flexbox Layout

1 голос
/ 09 марта 2020

Как вы упомянули,

Все виды будут прямоугольными angular размер

Так что давайте возьмем, к примеру, кнопку yourButton. Вам нужно передать два значения, одно сверху и другое слева, куда вы хотите поместить представление. Затем используйте следующий метод, как вы хотели addView(), чтобы получить желаемый результат в RelativeLayout:

private void addView(child, positionFromTop, positionFromLeft, width, height) {
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    layoutParams.topMargin = (int)(positionFromTop);
    layoutParams.leftMargin = (int)(positionFromLeft);
    yourButton.setLayoutParams(layoutParams);
}

Вы можете настроить макет, используя ширину и высоту аналогичным образом программным способом, если требуется. Пожалуйста, обратитесь к этому ответу , чтобы получить программный код для изменения размера пользовательского представления. Надеюсь, это поможет!

0 голосов
/ 09 марта 2020

Если вы хотите добавить несколько представлений динамически, возможно, попробуйте реорганизовать их в одно представление (это будет проще для их размещения)

https://www.vogella.com/tutorials/AndroidCustomViews/article.html

Какой тип ViewGroup вы используете? Если это макет ограничения, вы можете установить ограничения программно, используя ConstraintLayout.LayoutParams таким же образом, как SaadAAka sh упомянутый

0 голосов
/ 09 марта 2020

Попробуйте это:

//-----Main Layout-----\\
LinearLayout l1 = findViewById(R.id.myLinear);
ll.setOrientation(LinearLayout.VERTICAL);

//-----First layout-----\\
LinearLayout l11 = new LinearLayout(this);
l11.setBackgroundColor(android.R.color.holo_orange_dark);
l1.addView(l11, new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

//-----Second layout-----\\
LinearLayout l12 = new LinearLayout(this);
l12.setBackgroundColor(android.R.color.holo_green_dark);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(-30, 20, 20, 0); //Negative margin top to superposition views
l1.addView(l12, layoutParams);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...