2014-11-06 6 views
0

Когда пользователь вводит слово, он создает число Buttons, равное длине слова. Например: если пользовательские входы "aaaa" он будет создавать 4 Buttons, бок о бок, в первой строке. Затем, если пользователь входит в "bb", он будет создавать 2 Buttons, рядом со вторым во втором ряду. И "ccc" он создает 3 Buttons ...Динамическое добавление кнопок в RelativeLayout to LinearLayout

Изображение продемонстрировать:

enter image description here

Я динамически создавать RelativeLayout, затем динамически добавлять Buttons в этой компоновке. И, наконец, я добавляю RelativeLayout к существующим LinearLayout. Но проблема в том, что в строку добавляется только один Button. И моя программа в настоящее время выглядит следующим образом:

enter image description here

Может кто-то пожалуйста, мне исправить эту проблему?

КОД:

final LinearLayout linearLayout = (LinearLayout) findViewById(R.id.ll_bttn_words); 

    final LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(
      LayoutParams.WRAP_CONTENT, 
      LayoutParams.WRAP_CONTENT); 

    button_test.setOnClickListener(
      new View.OnClickListener() 
      { 
       public void onClick(View view) 
       { 
        RelativeLayout relativeLayout = new RelativeLayout(view.getContext()); 

        RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT, 
            RelativeLayout.LayoutParams.WRAP_CONTENT);  


        int size = enter_txt.getText().toString().length(); //the user input number of buttons 

        int id = 1; 

        for (int i=0; i<size; i++) 
        { 
         Button myButton = new Button(view.getContext()); 

         myButton.setBackgroundResource(R.drawable.button); 

         myButton.setId(id); 

         rlp.addRule(RelativeLayout.RIGHT_OF, myButton.getId()); 

         relativeLayout.addView(myButton, rlp); 

         id++; 
        } 

         linearLayout.addView(relativeLayout, llp); 

ответ

1

Структура должна быть простой

Просто нужно добавить свои кнопки в 3-й различной линейной схеме с горизонтальной ориентацией.

Как

<Relative layout>{ 
<LinearLayout global container with vertical orientation >{ 
<LinearLayout for 'a' type buttons container with horizontal orientation> 
<LinearLayout for 'b' type buttons container with horizontal orientation> 
<LinearLayout for 'c' type buttons container with horizontal orientation> 
} 
} 
+0

что это в xml? Я решил запрограммировать его динамически, так как пользователь может продолжать вводить слова. Это не только три слова. Пользователь может ввести 20 разных слов, так что 20 строк кнопок – user2456977

+0

вам нужно создать макеты в xml, просто нужно создать слова на пользовательском входе –

+0

также для большего количества слов вам также нужно создать горизонтальное прокрутку –

2
rlp.addRule(RelativeLayout.RIGHT_OF, myButton.getId()); 

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

простой способ решить эту проблему, чтобы использовать следующую строку вместо

rlp.addRule(RelativeLayout.RIGHT_OF, myButton.getId()-1); 

Но это не самый лучший способ сделать это, вы должны использовать LinearLayout с горизонтальной ориентацией вместо.

+0

hm, должно быть еще несколько ошибок , программа по-прежнему не возится. Я постараюсь сделать это, возможно, в LinearLayout, как вы сказали. Я просто привык к использованию вертикальной ориентации, я забыл, что существует горизонтальная ... – user2456977

+0

попробуйте увеличить значение 'id' перед строкой' myButton.setId (id); ' –

0

Вы, ребята, правы. Это намного проще с помощью LinearLayout. Для тех, кто заинтересован

final LinearLayout linearLayout = (LinearLayout) findViewById(R.id.ll_bttn_words); 

final LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(
       LayoutParams.WRAP_CONTENT, 
       LayoutParams.WRAP_CONTENT); 

button_test.setOnClickListener(
     new View.OnClickListener() 
      { 
       public void onClick(View view) 
       { 
        LinearLayout linearLayout2 = new LinearLayout(view.getContext()); 

        linearLayout2.setOrientation(LinearLayout.HORIZONTAL); 

        LinearLayout.LayoutParams rlp = new LinearLayout.LayoutParams(
             LinearLayout.LayoutParams.WRAP_CONTENT, 
             LinearLayout.LayoutParams.WRAP_CONTENT);  

        int size = enter_txt.getText().toString().length(); 
        for (int i=0; i<size; i++) 
        { 
         Button myButton = new Button(view.getContext()); 
         myButton.setBackgroundResource(R.drawable.button); 
         linearLayout2.addView(myButton, rlp); 
        } 
        linearLayout.addView(linearLayout2, llp); 
Смежные вопросы