2009-12-05 6 views

ответ

110
Button myButton = new Button(this); 
myButton.setText("Push Me"); 

LinearLayout ll = (LinearLayout)findViewById(R.id.buttonlayout); 
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
ll.addView(myButton, lp); 

Посмотрите на this пример

+1

thnxs для ур help.Its рабочих – deepthi

+1

Я обновил URL, потому что старый один дал 404 Пожалуйста, проверьте, что я ссылаюсь на правильную страницу. –

+0

yep это правильная страница, спасибо – nico

8

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

LinearLayout ll = (LinearLayout)findViewById(R.id.layout); 

Button btn = new Button(this); 
btn.setText("Manual Add"); 
btn.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 
ll.addView(btn); 
+0

что такое R.id.layout здесь? Я продолжаю получать макет как нерешенный –

+0

@AnnaGoldberg в вашем соответствующем XML-файле, который должен иметь определенный LinearLayout. В этом отрывке они дали свой LinearLayout идентификатор с именем layout, например: 'android: id =" @ + id/layout "' в их определении LinearLayout xml. – Amyga17

2

На самом деле добавить в макет XML ничего, что можно было бы использовать файл! Затем из исходного кода конкретной операции я получаю объект по его идентификатору, а я «играю» с помощью метода видимости.

Вот пример:

((Spinner)findViewById(R.id.email_spinner)).setVisibility(View.GONE);

+1

Это не то, что задают. Когда люди спрашивают о динамическом добавлении, они имеют значение без макета. То, что вы делаете, - это не показывать ... не добавлять. – Merlin

5

Попробуйте этот код

Button btn=new Button(this); 
btn.setId(btn); 
btn.setBackgroundResource(R.drawable.image); 
btn.setMinimumHeight(150); 
btn.setMinimumWidth(150); 
Relativelayout.addView(btn); 
+0

Как я могу добавить этот код в новое действие? – Moussa

44

попробовать это:

for (int i = 1; i <= 20; i++) { 
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.MATCH_PARENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT); 
    Button btn = new Button(this); 
    btn.setId(i); 
    final int id_ = btn.getId(); 
    btn.setText("button " + id_); 
    btn.setBackgroundColor(Color.rgb(70, 80, 90)); 
    linear.addView(btn, params); 
    btn1 = ((Button) findViewById(id_)); 
    btn1.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      Toast.makeText(view.getContext(), 
        "Button clicked index = " + id_, Toast.LENGTH_SHORT) 
        .show(); 
     } 
    }); 
} 
+5

+1 для демонстрации setOnClickListener. – digitaljoel

+1

Почему кнопка добавлена, а затем получена перед установкой прослушивателя кликов. Не могли бы вы добавить слушателя, а затем добавить его в макет и сделать? – rwilson04

+0

Лучший ответ, потому что вы можете нажать на кнопки, установив id :) – boctulus

3

Я использовал это (или очень похожий) код добавьте несколько TextViews в LinearLayout:

// Quick & dirty pre-made list of text labels... 
String names[] = {"alpha", "beta", "gamma", "delta", "epsilon"}; 
int namesLength = 5; 

// Create a LayoutParams... 
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.WRAP_CONTENT, 
    LinearLayout.LayoutParams.FILL_PARENT); 

// Get existing UI containers... 
LinearLayout nameButtons = (LinearLayout) view.findViewById(R.id.name_buttons); 
TextView label = (TextView) view.findViewById(R.id.master_label); 

TextView tv; 

for (int i = 0; i < namesLength; i++) { 
    // Grab the name for this "button" 
    final String name = names[i]; 

    tv = new TextView(context); 
    tv.setText(name); 

    // TextViews CAN have OnClickListeners 
    tv.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      label.setText("Clicked button for " + name); 
     } 
    }); 

    nameButtons.addView(tv, params); 
} 

Основное различие между этим и код dicklaw795 является не установлен() и вновь получить() идентификатор для каждого TextView - я счел необходимым, хотя, возможно, это нужно, чтобы позже идентифицировать каждую кнопку в обычной процедуре обработчика (например, один из которых называется onClick() для каждого TextView).

3

Попробуйте ввести код.

LinearLayout layout = (LinearLayout) findViewById(R.id.llayout); 
layout.setOrientation(LinearLayout.VERTICAL); 

Button btn = new Button(this); 
btn.setText("Button1"); 

layout.add(btn); 

btn = new Button(this); 
btn.setText(Button2); 
layout.add(btn); 

вот так вы добавляете кнопки в соответствии с вашими требованиями.

5

попробовать это

private void createLayoutDynamically(int n) { 

    for (int i = 0; i < n; i++) { 
     Button myButton = new Button(this); 
     myButton.setText("Button :"+i); 
     myButton.setId(i); 
     final int id_ = myButton.getId(); 

     LinearLayout layout = (LinearLayout) findViewById(R.id.myDynamicLayout); 
     layout.addView(myButton); 

     myButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       Toast.makeText(DynamicLayout.this, 
         "Button clicked index = " + id_, Toast.LENGTH_SHORT) 
         .show(); 
      } 
     }); 
    } 
4

Попробуйте этот код. Это будет хорошо работать ..

public class DynamicViewsActivity extends Activity { 

Button button; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.activity_dynamic_views); 
    ScrollView scrl=new ScrollView(this); 
    final LinearLayout ll=new LinearLayout(this); 
    ll.setOrientation(LinearLayout.HORIZONTAL); 
    LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
    layoutParams.setMargins(100, 500, 100, 200); 
    scrl.addView(ll); 
    Button add_btn=new Button(this); 
    add_btn.setText("Click Here"); 

    ll.addView(add_btn, layoutParams); 


    final Context context = this; 

    add_btn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 

      Intent intent = new Intent(context, App2Activity.class); 
      startActivity(intent); 
     } 
    }); 
    this.setContentView(scrl); 
} 
} 
6
for (int k = 1; k < 100; k++) { 
    TableRow row = new TableRow(this); 

    innerloop: 
    for (int l = 1; l < 4; l++) { 
     btn = new Button(this); 
     TableRow.LayoutParams tr = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     layout.setWeightSum(12.0f); 
     tr.weight = 0; 
     btn.setLayoutParams(tr); 
     btn.setTextColor(a); 
     btn.setHeight(150); 

     btn.setWidth(150); 
     btn.setId(idb); 
     btn.setText("Button " + idb); 
     row.addView(btn); 
    } 
} 
1
Button myButton = new Button(this); 
myButton.setId(123); 
myButton.setText("Push Me"); 


LinearLayout ll = (LinearLayout)findViewById(R.id.buttonlayout); 
LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
ll.addView(myButton, lp); 
myButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View view) { 
       Toast.makeText(DynamicLayout.this, 
         "Button clicked index = " + id_, Toast.LENGTH_SHORT) 
         .show(); 
      } 
     }); 
1

Если вы хотите добавить динамически кнопки попробовать это:

public class MainActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 
    for (int i = 1; i <= 5; i++) { 
     LinearLayout layout = (LinearLayout) findViewById(R.id.myLinearLayout); 
     layout.setOrientation(LinearLayout.VERTICAL); 
     Button btn = new Button(this); 
     btn.setText(" "); 
     layout.addView(btn); 
    } 

} 
1
public void add_btn() { 

    lin_btn.setWeightSum(3f); 
    for (int j = 0; j < 3; j++) { 
     LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(
       LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     params1.setMargins(10, 0, 0, 10); 
     params1.weight = 1.0f; 

     LinearLayout ll; 
     ll = new LinearLayout(this); 
     ll.setGravity(Gravity.CENTER_VERTICAL); 
     ll.setOrientation(LinearLayout.HORIZONTAL); 
     ll.setLayoutParams(params1); 

     final Button btn; 
     btn = new Button(DynamicActivity.this); 

     btn.setText("A"+(j+1)); 
     btn.setTextSize(15); 
     btn.setId(j); 
     btn.setPadding(10, 8, 10, 10); 

     ll.addView(btn); 

     lin_btn.addView(ll); 


     btn.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if(v.getId()==0) 
       { 
        txt_text.setText("Hii"); 
       }else if(v.getId()==1) 
       { 
        txt_text.setText("hello"); 
       }else if(v.getId()==2) 
       { 
        txt_text.setText("how r u"); 
       } 



      } 
     }); 
    } 

} 
-3

mainactivity.xml В записи:

<Button 
    android:id="@+id/search" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Search" 
    android:visibility="invisible"/> 

В main.java пишут:

Button buttonSearch; 
buttonSearch = (Button)findViewById(R.id.search); 
buttonSearch.setVisibility(View.VISIBLE); 
4

Проверьте это.

LinearLayout ll_Main = new LinearLayout(getActivity()); 
LinearLayout ll_Row01 = new LinearLayout(getActivity()); 
LinearLayout ll_Row02 = new LinearLayout(getActivity()); 

ll_Main.setOrientation(LinearLayout.VERTICAL); 
ll_Row01.setOrientation(LinearLayout.HORIZONTAL); 
ll_Row02.setOrientation(LinearLayout.HORIZONTAL); 

final Button button01 = new Button(getActivity()); 
final Button button02 = new Button(getActivity()); 
final Button button03 = new Button(getActivity()); 
final Button button04 = new Button(getActivity()); 

ll_Row01.addView(button01); 
ll_Row01.addView(button02); 

ll_Row02.addView(button03); 
ll_Row02.addView(button04); 

ll_Main.addView(ll_Row01); 
ll_Main.addView(ll_Row02); 

button04.setVisibility(View.INVISIBLE); 
button04.setVisibility(View.VISIBLE); 
0

Вы можете создать базовый макет для вашей кнопки и динамически изменять только то, что конкретно, как этот проект я сделал для выполнения различных упражнений из дизайнерского материала Конечно, я везу:

В этом примере я использую предварительно сконфигурированный AppCompatButton:

layout_base_button.xml

<android.support.v7.widget.AppCompatButton 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/btn_base" 
    android:layout_width="200dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:layout_marginTop="8dp" 
    style="@style/RaisedButton" 
    > 

</android.support.v7.widget.AppCompatButton> 


<style name="RaisedButton" parent="Widget.AppCompat.Button.Colored"> 
    <item name="android:textSize">11sp</item> 
    <item name="android:textStyle">bold</item> 
</style> 

И в MainActivity я создал несколько экземпляров и изменил то, что мне нужно, как текст кнопки и OnClick событие:

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="udemy.android.materialdesign.MainActivity"> 

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

    </LinearLayout> 


</ScrollView> 



public class MainActivity extends AppCompatActivity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     LinearLayout baseLayout = findViewById(R.id.base_layout); 

     baseLayout.addView(createButton("TextFields", baseLayout, 
       view -> startActivity(createIntent(TextFieldsActivity.class)) 
     )); 

     baseLayout.addView(createButton("Buttons", baseLayout, 
       view -> startActivity(createIntent(ButtonsActivity.class)) 
     )); 

     baseLayout.addView(createButton("Toolbar", baseLayout, 
       view -> startActivity(createIntent(ToolbarActivity.class)) 
     )); 

    } 

    private View createButton(String text, LinearLayout baseLayout, View.OnClickListener onClickEvent) { 
     View inflated = LayoutInflater.from(this).inflate(R.layout.layout_base_button, baseLayout, false); 
     AppCompatButton btnBase = inflated.findViewById(R.id.btn_base); 

     btnBase.setText(text); 
     btnBase.setOnClickListener(onClickEvent); 
     return btnBase; 
    } 

    private Intent createIntent(Class<?> cls) { 
     return new Intent(this, cls); 
    } 
} 

Извините за опоздание ...

Смежные вопросы