Проблема с макетами: SliderDrawer не заполняет родительскую ширину

Я использую SliderDrawer в Android. Внутри ящика есть макет, который содержит раздутый макет. Вот конечный результат:

Введите описание изображения здесь

Обратите внимание, как содержимое ящика (в сером) не принимает всю ширину родителя (черная область).

Вот код ящика (main_layout.xml):

[UPDATE 2, добавлен весь код:]

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:id="@+id/banner" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:padding="3px"> <ImageView android:src="@drawable/title" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:layout_width="wrap_content" android:text="@string/title" android:layout_height="wrap_content" android:textSize="18sp" android:gravity="center_vertical" android:paddingLeft="4px" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_below="@id/banner" android:id="@+id/middle" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <View android:layout_width="fill_parent" android:layout_height="1dip" android:background="#FF555555" /> <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="3px" android:layout_weight="1" /> <TextView android:id="@android:id/empty" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="@string/no_items" android:padding="3px" android:layout_weight="1" /> </LinearLayout> <LinearLayout android:id="@+id/LinearLayout01" android:layout_alignParentBottom="true" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal|bottom"> <SlidingDrawer android:id="@+id/drawer" android:background="#22222222" android:layout_height="110dip" android:handle="@+id/handle" android:content="@+id/media_player_container" android:layout_width="fill_parent"> <ImageView android:id="@+id/handle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/tray" android:scaleType="centerCrop"/> <LinearLayout android:id="@+id/media_player_container" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="bottom|center_horizontal" /> </SlidingDrawer> </LinearLayout> </RelativeLayout> 

Вот код завышенной области (media_player_container.xml):

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="bottom|center_horizontal" android:orientation="vertical" android:background="#FF555555" android:padding="3px"> <SeekBar android:id="@+id/progress" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingBottom="3px" android:progress="1000" /> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageButton android:id="@+id/speakerhandset" android:src="@drawable/handset" android:layout_width="60dip" android:layout_height="wrap_content" android:scaleType="center"/> <ImageButton android:id="@+id/rewind" android:src="@android:drawable/ic_media_rew" android:layout_width="60dip" android:paddingRight="3px" android:layout_height="wrap_content" android:scaleType="center"/> <ImageButton android:id="@+id/play" android:src="@android:drawable/ic_media_play" android:layout_width="60dip" android:paddingRight="3px" android:layout_height="wrap_content" android:scaleType="center"/> <ImageButton android:id="@+id/pause" android:src="@android:drawable/ic_media_pause" android:layout_width="60dip" android:paddingRight="3px" android:layout_height="wrap_content" android:visibility="gone" android:scaleType="center"/> <ImageButton android:id="@+id/fastforward" android:src="@android:drawable/ic_media_ff" android:layout_width="60dip" android:paddingRight="3px" android:layout_height="wrap_content" android:scaleType="center"/> </LinearLayout> </LinearLayout> 

Можете ли вы определить, что я делаю неправильно?

[Обновить 1] Вот код (внутри onCreate ()), где я раздуваю макет:

 LinearLayout container = (LinearLayout) this.findViewById(R.id.media_player_container); LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout layout = (LinearLayout) layoutInflater.inflate(R.layout.media_player, null, false); container.addView(layout); 

Вместо того, чтобы раздувать ваш макет контента, а затем добавлять его в виде вложенного линейного потока, попробуйте фактически просто включить макет, который вы хотите непосредственно в макете media_player_container. Начните с простого (возможно, просто его содержимое должно быть View с прочным фоном и без дополнений) и проделайте свой путь оттуда, пока не сможете узнать, что вызывает проблему.

Вы также можете рассмотреть возможность замены этих строк:

 LinearLayout container = (LinearLayout) this.findViewById(R.id.media_player_container); LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); LinearLayout layout = (LinearLayout) layoutInflater.inflate(R.layout.media_player, null, false); container.addView(layout); 

с:

 View.inflate(this, R.layout.media_player, (ViewGroup) findViewById(R.id.media_player_container) 

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

При добавлении представления вам нужно предоставить LayoutParams .

 container.addView(layout, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
 <SlidingDrawer android:id="@+id/drawer" android:padding="10dip" android:background="#22222222" android:layout_height="110dip" android:handle="@+id/handle" android:content="@+id/media_player_container" android:layout_width="fill_parent"> 

Обратите внимание на андроид: padding = "10dip". Ширина выдвижного ящика заполняет родителя, но у вас есть 10dip со всех четырех сторон. Если вы хотите, чтобы прокладка сверху и снизу была неподвижной, выполните следующие действия:

 android:paddingTop="10dip" android:paddingBottom="10dip" 

Вы указываете атрибут «layoutHeight» для скользящего ящика. Установите высоту макета для FillParent, и это должно сделать это.