Динамически добавьте кнопку в fingerpaint android api demos - PullRequest
1 голос
/ 10 мая 2011

Теперь я хотел бы добавить кнопку динамически в демоверсии FingerPaint api. Но проблема в том, что я не знаком с динамическим созданием макета в Java-файле. кто-нибудь знает, как я могу реализовать этот класс, чтобы добавить кнопки в строке заголовка? Любые примеры кода будут признательны.

1 Ответ

2 голосов
/ 10 мая 2011

Пояснение:

1) Получить ссылку на контейнер макета, куда вставить компонент динамического интерфейса. Если контейнер был создан динамически, у вас уже есть ссылка на него. Если это из макета XML, вы можете получить ссылку с findViewById.

2) Создать динамический компонент. Вам нужно передать контекст конструктору: используйте this.

3) Установить свойства созданного компонента.

4) Используйте container.addView(component) для динамического добавления компонента в контейнер.


Пошаговая демонстрация:

1) Используйте ассистент проекта для создания нового проекта Android с параметрами по умолчанию, пакетом test.test и действием Main.

2) Отредактируйте файл res/layout/main.xml следующим образом.

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

3) Отредактируйте файл src/test.test/Main.java следующим образом.

    package test.test;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.LinearLayout;
    import android.widget.Toast;

    public class Main extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            addDynamicButton();
        }

        /**
         * Adds a dynamic button.
         */
        private void addDynamicButton() {
            // creates a button dynamically
            Button btn = new Button(this);
            // sets button properties
            btn.setText("I'm dynamic. Please click me.");
            btn.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast toast = Toast.makeText(Main.this, "Yo!", Toast.LENGTH_LONG);
                    toast.show();
                }
            });
            // retrieve a reference to the container layout
            LinearLayout container = (LinearLayout)findViewById(R.id.layoutId);
            // adds dynamic button to the GUI
            container.addView(btn);
        }
    }

4) Скомпилируйте и запустите приложение для Android. Теперь вы знаете, как это работает, и вы можете использовать эту технику для добавления компонентов любого типа в любой контейнер макета.

...