Раздувание макета в пользовательском контроле - как?

У меня есть идея о создании пользовательского элемента управления здесь: Интерфейс Android - нужны предложения о том, какие виджеты использовать

Как мне сделать SAME, но создав макет управления в XML и просто надуть его в коде? Не так, как в этом примере, когда я должен создать каждый элемент управления вручную.

Моя первая проблема, что LinearLayout, используемая в качестве базы, не поддерживает команду setView(). Должен ли я продлить что-то еще?

EDIT: я нашел Эта: http://developer.android.com/guide/topics/ui/custom-components.html и это: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List4.html

Кажется, мне нужен COMPOUND CONTROL. Мне просто нужно немного кода. Как раздувать контрольный контент из XML? BOST-статья и образец говорят, что я могу, но КАК?

Ответы

Ответ 1

Вы должны использовать макет, подобный этому:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
  <View android:layout_width="fill_parent"
  android:layout_height="0px"
  android:layout_weight="1"
  android:background="#0F0"/>
  <View android:layout_width="fill_parent"
  android:layout_height="0px"
  android:layout_weight="1"
  android:background="#0FF"/>
</merge>

где <merge> означает "положить все, что внутри меня, в родителя, на которое меня надувают".

Затем в коде:

public class CControl extends LinearLayout {

    public CControl(Context context) {
        this(context, null);
    }

    public CControl(Context context, AttributeSet attrs) {
        super(context, attrs);

        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        inflater.inflate(R.layout.tryout, this);
    }
    // ......
}

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