Android программно добавляет настраиваемую кнопку в макет

Я хочу программно добавить кнопки в Android, файл xml для кнопки будет

<Button
android:textStyle="bold"
android:background="@drawable/blue"
android:textColor="@drawable/blue_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/funny_excuses"
android:id="@+id/funny"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:textSize="25sp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />

Как лучше всего это сделать? Я буду менять только текст для каждой новой кнопки.. И, возможно, у меня будет другой тип кнопки, например, с другим фоном и цветом текста..


person Boldijar Paul    schedule 19.09.2014    source источник
comment
возможный дубликат Android: программное добавление кнопок в макет   -  person 2Dee    schedule 19.09.2014
comment
@2Dee нет, это совсем не похоже на этот вопрос .. я хочу добавить пользовательскую кнопку еще раз .. с собственными настройками   -  person Boldijar Paul    schedule 19.09.2014
comment
В основном это это то же самое, вам просто нужно применить собственный стиль, используя этот stackoverflow.com/questions/2016249/ или установить стиль программно...   -  person 2Dee    schedule 19.09.2014


Ответы (5)


Также можно создать эту кнопку xml и раздуть макет макета из кода: button.xml:

<Button
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:textStyle="bold"
 android:background="@drawable/blue"
 android:textColor="@drawable/blue_text"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/funny_excuses"
 android:id="@+id/funny"
 android:paddingBottom="10dp"
 android:paddingTop="10dp"
 android:paddingLeft="6dp"
 android:paddingRight="6dp"
 android:textSize="25sp"
 android:layout_alignParentTop="true"
 android:layout_centerHorizontal="true" />

код:

    Button button = (Button) getLayoutInflater().inflate(R.layout.button, null);
    button.setText("Hello world");
    RelativeLayout ll = (RelativeLayout) findViewById(R.id.ll); //layout to add
    ll.addView(button);
person Greta Radisauskaite    schedule 19.09.2014
comment
Это было именно то, что я хотел сделать, спасибо. Как программно установить тег android:layout_below=, чтобы кнопка добавлялась последней? - person Boldijar Paul; 19.09.2014
comment
вам нужно создать LayoutParams и добавить правило, эта ссылка может вам помочь: ссылка также подумайте о замене на LinearLayout. - person Greta Radisauskaite; 19.09.2014

proje-->res-->values-->style.xml

<style name="othername" >
        <item name="android:layout_width">match_parent</item>
        <item name="android:textColor">#000000</item>
        <item name="android:textSize">20sp</item>
        <item name="android:gravity">left</item>
        <item name="android:layout_marginLeft">30sp</item>
        <item name="android:layout_marginRight">30sp</item>
        <item name="android:layout_marginTop">10sp</item>
   </style>

<Button
style="@style/othername"
/>
person buket    schedule 19.09.2014
comment
Как задать стиль программно? - person Boldijar Paul; 19.09.2014
comment
Могу ли я узнать причину делать все программно - person Confuse; 19.09.2014
comment
У меня есть список категорий .. и мне нужно поместить их программно один под другим .. в кнопках - person Boldijar Paul; 19.09.2014

Хорошо, сделайте одну вещь. Только вы хотите изменить текст кнопки. Итак, программно для объекта кнопки сохраните setText() и setBackground()...

person Sandeep Kumar    schedule 19.09.2014
comment
хорошо. скажите мне одну вещь, которую вы создали с помощью файла xml. так что вы хотите динамически изменить текст кнопки для того, что я упомянул выше решение (или) вы хотите создать кнопку динамически, не определяя в файле xml? - person Sandeep Kumar; 19.09.2014
comment
я хочу программно добавить кнопки, которые будут выглядеть так, как в xml, который я предоставил - person Boldijar Paul; 19.09.2014

Создайте свою кнопку в своем макете, затем используйте yourButton.setVisibility(View.GONE);, чтобы скрыть ее, и используйте yourButton.setVisibility(View.VISIBLE);, чтобы сделать ее видимой.

person Mohammad Farahi    schedule 19.09.2014

макет.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@id/llContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

.javaфайл

public void onClick(View v) {
switch (v.getId()) {

case R.id.btnAddARoom:
    //add a room
    //Find you parent layout which we'll be adding your button to:
    LinearLayout layout = (LinearLayout) findViewById(R.id.llContainer);

    roomName = etAddARoom.getText().toString();
    Button createdButton = new Button(this);
    createdButton.setText(roomName);
    createdButton.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,         LayoutParams.WRAP_CONTENT));
    layout.addView(createdButton);

    //if no rooms make tvnorooms disappear

    break;
}
person Sandeep Kumar    schedule 19.09.2014