2016-02-10 2 views
0

Я хочу установить кнопки один за другим по вертикали. Я пытался что-то вроде ниже, но это не работает. Нужна помощь, пожалуйста.Как добавить динамические кнопки вертикально один за другим в Android?

 RelativeLayout body=(RelativeLayout) findViewById(R.id.body); 
    RelativeLayout.LayoutParams buttonParams = 
      new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 




    Button btn; 
    List<Button> allEds = new ArrayList<Button>(); 
    for(int i=0;i<totalSID;i++){ 
     btn = new Button(FaqList.this); 
     btn.setId(i); 
     allEds.add(btn); 
     if(i==0){} 
     else 
     buttonParams.addRule(RelativeLayout.BELOW,allEds.get(i-1).getId()); 

     body.addView(btn,buttonParams); 


    } 

Добавление файла xml. Для справки вы можете пройти через это.

<?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true" 
    android:scrollbars="vertical" 
    > 

    <HorizontalScrollView 
    android:layout_width="fill_parent" android:layout_height="wrap_content" 
    android:fillViewport="true" 

    > 

    <LinearLayout 
      android:layout_marginTop="20dp" 

     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:layout_marginBottom="20dp" 
     > 



     <LinearLayout 
      android:id="@+id/body" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_marginBottom="5dp" 
      android:layout_marginTop="5dp" 

      android:orientation="horizontal" 
      android:animateLayoutChanges="true"> 

      </LinearLayout> 
      </LinearLayout> 

      </HorizontalScrollView> 
     </ScrollView> 

     </LinearLayout 

Я не знаю, где проблема на самом деле

+0

Вы использовали относительную компоновку. с этой крышкой покрывают друг друга. используйте linearlayout как родительский контейнер. но если вы хотите использовать относительный макет, вы должны сохранить предыдущие идентификаторы кнопок и установить новые кнопки ниже свойства следующим образом: RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams (LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); relativeParams.addRule (RelativeLayout.BELOW, idOfTheViewBelow); –

+0

, если я использую linearlayout, я не могу добавить правила позже, а в линейке кнопки просто идут бок о бок горизонтально:/ – black

ответ

2

Если вы хотите добавить кнопки вертикально, то просто использовать LinearLayout вместо RelativeLayout в вашем теле.

int iNumberOfButtons = productTypeList.size(); 
Button[] dynamicButtons = new Button[iNumberOfButtons]; 

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

for (int i = 0; i < iNumberOfButtons; i++) { 
    ProductType productType = productTypeList.get(i); 
    dynamicButtons[i] = new Button(getActivity()); 
    dynamicButtons[i].setText(productType.getTitleString()); 
    dynamicButtons[i].setId(i); 
    dynamicButtons[i].setTextSize(15.0f); 
    dynamicButtons[i].setOnClickListener(this); 
    dynamicButtons[i].setLayoutParams(paramsButton); 
    dynamicButtonsLinearLayout.addView(dynamicButtons[i]); // dynamicButtonsLinearLayout is the container of the buttons 
} 
+0

, если я использую линейный, кнопки идут бок о бок горизонтально:/ – black

+0

измените ориентацию вашего контейнера LinearLayout на вертикальный, здесь это код -> android: orientation = "vertical" –

+0

ОК, так что это была проблема, спасибо. Проблема решена :) – black

1

Используйте линейную компоновку вместо относительной компоновки. Если вам нужно добавить несколько кнопки динамически использовать RecyclerView в зависимости от позиции товара вы можете делать все, что вам нужно

LayoutParams lparams = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
Button bt=new Button(this); 
bt.setLayoutParams(lparams); 
this.m_vwJokeLayout.addView(bt); 
+0

Я пробовал, но кнопки идут бок о бок горизонтально – black

+0

Добавить гравитацию для макетов пакетиков. params.gravity = Gravity.Center; button.setLayoutParams (params); – MathaN

1

вы использовали относительное расположение. с этой крышкой покрывают друг друга. используйте linearlayout как родительский контейнер. но если вы хотите использовать относительную компоновку, вы должны сохранить предыдущие идентификаторы кнопок и установить новые кнопки ниже таких свойств:

RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
    relativeParams.addRule(RelativeLayout.BELOW, idOfTheViewBelow);