кнопка расширения Android, макет XML - PullRequest
0 голосов
/ 17 мая 2011

У меня есть следующий класс (входит в другой класс)

class RecordButton extends Button {
    boolean mStartRecording = true;

    OnClickListener clicker = new OnClickListener() {
        public void onClick(View v) {
            onRecord(mStartRecording);
            if (mStartRecording) {
                setText("Stop recording");
            } else {
                setText("Start recording");
            }
            mStartRecording = !mStartRecording;
        }
    };

    public RecordButton(Context ctx) {
        super(ctx);
        setText("Start recording");
        setOnClickListener(clicker);
    }
}

Отображение кнопки выполняется с использованием следующего кода:

public void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    LinearLayout ll = new LinearLayout(this);
    mRecordButton = new RecordButton(this);
    ll.addView(mRecordButton,
        new LinearLayout.LayoutParams(
            ViewGroup.LayoutParams.WRAP_CONTENT,
            ViewGroup.LayoutParams.WRAP_CONTENT,
            0));
    setContentView(ll);
}

Как определить кнопкумакет в файл .xml вместо того, чтобы делать это в коде Java?

Я пробовал это:

<AudioRecordTest.test.RecordButton
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Button"
    android:id="@+id/record" />   

Но это не работает ...

Большое спасибо,

Иоахим

1 Ответ

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

Я понимаю "(входит в другой класс)", поскольку у вас есть внутренний класс RecordButton.

Предполагается, что ваш пакет AudioRecordTest.test (что было бы очень плохим выбором имени), а ваш класс RecordButton является внутренним классом AudioRecord.class, вам необходимо использовать:

 <view class="AudioRecordTest.test.AudioRecord$RecordButton"

Используйте знак $ для разделения внутренних классов.Вам нужно написать квалифицированное имя внутри кавычек.Кроме того, убедитесь, что вы создаете класс public public, иначе он не будет виден.

Кстати: есть ли какая-то конкретная причина, по которой вы создаете его как внутренний класс вместо того, чтобы разделять его?

...