Раздувание вида изнутри конструктора View (Android) - PullRequest
1 голос
/ 03 июня 2011

Я использую LayoutInflater для раздувания внутренностей представления в конструкторе представления следующим образом:

    public class TrackHeader extends RelativeLayout {

        public TrackHeader( Context context ) {
            super( context );
            final LayoutInflater inflater = getLayoutInflater( );
            final RelativeLayout view = (RelativeLayout) inflater.inflate(
                    R.layout.trackheader, this, true );
            < more here >
        }

(я тоже пробовал следующее)

        public TrackHeader( Context context ) {
            super( context );
            final LayoutInflater inflater = getLayoutInflater( );
            final RelativeLayout view = (RelativeLayout) inflater.inflate(
                    R.layout.trackheader, this, false );
            addView( view, new ViewGroup.LayoutParams(  ViewGroup.LayoutParams.MATCH_PARENT,    ViewGroup.LayoutParams.MATCH_PARENT ) );
            < more here >
        }
    }

XML достаточно прост:

    <?xml version="1.0" encoding="UTF-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        <TextView android:id="@+id/trackNumber"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_gravity="center_horizontal"
            android:textSize="16dip"
            />
        <Button android:id="@+id/waveformBtn"
            android:layout_width="match_parent"
            android:layout_height="40dip"
            android:layout_below="@+id/trackNumber"
            android:layout_gravity="center_horizontal"
            android:textSize="12dip"/>
        <CheckBox android:id="@+id/enabledCheck"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/waveformBtn"
            android:layout_gravity="center_horizontal"
            android:textSize="12dip"/>
        <CheckBox android:id="@+id/loopingCheck"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/enabledBtn"
            android:layout_gravity="center_horizontal"
            android:textSize="12dip"/>
     </RelativeLayout>

Причина, по которой я раздуваю это таким образом, заключается в том, что класс (TrackHeader) является вложенным / внутренним классом, и это, кажется, мешает мне ссылаться на класс непосредственно в XML. Ну, когда надувать, макет не работает. Верхний узел (RelativeLayout) имеет правильный размер для заполнения TrackHeader, но дочерние представления вообще не имеют размера и остаются (0, 0, 0, 0). Любопытно, если кто-нибудь из поклонников Android сможет подтолкнуть меня в правильном направлении ...

Спасибо заранее и счастливого кодирования! -Е.

1 Ответ

0 голосов
/ 03 июня 2011

Я не уверен, что это объясняет, почему нет дочерних представлений имеют размер, но атрибут "layout_below" элемента "loopingCheck", вероятно, должен быть "@ + id / enabledCheck", а не"@ + идентификатор / enabledBtn".Кроме этого, никаких очевидных проблем не выпрыгивает.

...