2016-04-11 16 views
2

私はAndroidアプリを作るのに少し問題があります。 私は敏感でダイナミックなアプリケーションを作りたいと思っています。Android - 画面サイズとボタンの下に動的にボタンをプログラムによって追加する方法

ユーザーがボタンをクリックすると、私は動的にボタンを追加したい、ここに私のコードは次のとおりです。

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 


    switch (item.getItemId()) { 
     case R.id.action_ajouter: 

      Button b = new Button(this); 


       //numButton counts the number of buttons created by 
       //clicking on a button placed in the action bar 

       if (numButton % 2 != 0) { 
        //Align to the left 

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
        params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
        b.setLayoutParams(params); 
        b.setText("Bouton n°" + numButton); 
        mainRelativeLayout.addView(b); 
        numButton++; 

       } else { 
        //Align to the right 
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
        b.setLayoutParams(params); 
        b.setText("Bouton n°" + numButton); 
        mainRelativeLayout.addView(b); 
        numButton++; 
       } 

      break; 
     default: 
      break; 
    } 
    return true; 


    } 

私もボタンの多くを追加するScrollViewを追加する必要があります。

問題は次のとおりです。2つのボタンを並べて追加する必要があります。他のボタンは、それらを1つずつ(横に並べても)吹き飛ばします。問題はそれらを重畳して他のものの下に追加しないことです。上記のコードでは

params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
       b.setLayoutParams(params); 
       b.setText("Bouton n°" + numBoutton); 

、すべてのボタンが親と左揃えします:あなたのレイアウトのparamsが適切でないため、

+1

あなたの質問は何ですか? –

+0

あなたの問題を述べてください。 – crashOveride

+0

私は2つのボタンを並べて追加する必要があり、他のボタンはそれらのボタンを吹く(横並びにも)。問題はそれらを重畳して他のものの下に追加しないことです。 – AntoineDJ

答えて

1

あなたのボタンがお互いを重複していました。

他のボタンの隣にボタンを追加する場合は、RelativeLayoutの代わりにLinearLayoutを使用してください。

すでに水平方向の線形レイアウトがあるとします。

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
       b.setLayoutParams(params); 
       b.setText("Bouton n°" + numBoutton); 
       mainLinearLayout.addView(b); 
       numBoutton++; 

それだけです。

編集:ここにいくつかのコードがありますが、これがあなたの必要性であるかどうかは分かりません。

このアプリケーションでは、私は、LinearLayoutは、ScrollViewとボタン内にあります。ボタンをクリックすると、ScrollViewに新しいボタンが追加されます。

ここMainActivity.java

package com.tiennt.myapplication; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.LinearLayout; 

public class MainActivity extends AppCompatActivity { 

    private LinearLayout llButtons; 
    private int buttonCount; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button btnAdd = (Button) findViewById(R.id.btn_add); 
     btnAdd.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       doAddButton(); 
      } 
     }); 
     llButtons = (LinearLayout) findViewById(R.id.ll_buttons); 
    } 

    private void doAddButton() { 
     Button button = new Button(this); 
     button.setText("Button " + ++buttonCount); 
     button.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
     llButtons.addView(button); 
    } 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.tiennt.myapplication.MainActivity"> 

    <Button 
     android:id="@+id/btn_add" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="ADD BUTTON" 
     android:layout_gravity="center_horizontal" /> 

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:id="@+id/ll_buttons" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" /> 

    </ScrollView> 

</LinearLayout> 

は結果である: Result

+0

私は画面上のボタンを見ることができません。また、ScrollViewを使用して多くのボタンを追加しています。私は別のものを変える必要がありますか? – AntoineDJ

+0

ビューの構造はどのようになっていますか? paramを含む線形レイアウトをScrollView内に配置しましたか? – Tien

+0

私は自分のレイアウトファイルにScrollViewしか持っていませんでしたが、私は前述のようにJavaコードでLinearLayoutを追加しました。私のLinearLayoutは、これらのパラメータを持っています: LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT、LinearLayout.LayoutParams.WRAP_CONTENT); – AntoineDJ

0

は、このコードをチェックしてください:

// first Button 
      RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.relativelayout); 
      RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 
      Button b1 = new Button(this); 
      b1.setText("Hello button 1"); 
      b1.setLayoutParams(param); 
      b1.setId(1); 
      relativeLayout.addView(b1); 

      // second Button RIGHT_OF 
      RelativeLayout.LayoutParams paramRightOf = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 
      Button b2 = new Button(this); 
      b1.setText("Hello button 2"); 
      paramRightOf.addRule(RelativeLayout.RIGHT_OF, b1.getId()); 
      b2.setLayoutParams(paramRightOf); 
      b2.setId(2); 
      relativeLayout.addView(b1); 

      // add third button BELOW 
      RelativeLayout.LayoutParams paramBelow = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT, 
        RelativeLayout.LayoutParams.WRAP_CONTENT); 
      Button b3 = new Button(this); 
      b1.setText("Hello button 3"); 
      paramBelow.addRule(RelativeLayout.BELOW, b1.getId()); 
      b3.setLayoutParams(paramBelow); 
      b3.setId(3); 
      relativeLayout.addView(b3); 
+0

これは動作しませんか? @AntoineDJ –

+0

それは動作しますが、私が待っていた結果ではありません。 @Tienは私が望むものを示しました。 – AntoineDJ

関連する問題