2011-01-31 2 views
3

저는 Android에서 SliderDrawer를 사용하고 있습니다. 서랍 안에는 부풀린 레이아웃이 포함 된 레이아웃이 있습니다. (회색) 서랍의 내용이 부모 (검은 색 영역)의 전체 폭을하지 않는 방법레이아웃 문제 : SliderDrawer가 부모 너비를 채우지 않습니다.

enter image description here

주의 : 여기에 최종 결과입니다. 여기

서랍 코드 (main_layout.xml)이다 : 여기
<?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)의 코드가있다 :

:

[UPDATE 2 전체 코드 추가]를

<?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); 
+0

R.layout.media_player는 무엇을 참조합니까? 나는 xml을 볼 수 없다. –

+0

배경에 NinePatches를 사용하고 있습니까? 그렇다면 콘텐츠 영역을 확인하십시오. –

답변

6

대신 콘텐츠 레이아웃을 팽창하고 중첩의 LinearLayout로 추가로, 당신은 media_player_container 레이아웃에서 직접 원하는 레이아웃을 포함하여 실제로 시도합니다. 간단하게 시작합니다 (내용이 단색 배경과 패딩이없는보기 일 수도 있습니다). 그리고 문제를 유발할 수있는 것을 찾을 수있을 때까지 거기에서부터 작업하십시오.

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) 

을, 당신은보기 시스템이 제대로 레이아웃 속성을 관리 할 수 ​​있습니다 (이는 기술적으로 컨테이너에 적용되며 사용자가 정의한보기가 아닙니다). 그것들이 없으면, 팽창 된 뷰에 정의 된 레이아웃 속성은 자식으로 추가하기 전에 버려집니다 (어떤 유형의 레이아웃을 팽창시키고 있는지 알 수 없으므로).

+0

+1입니다. 코드에서 하나의 레이아웃을 다른 레이아웃에 추가하는 작업은 프로세스의 특정 레이아웃 속성을 덮어 씁니다. 예를 들어'LayoutParams'없이'addView()'를 호출하면 높이와 너비 모두에 대해 WRAP_CONTENT에 대한 뷰의 레이아웃 매개 변수가 기본값으로 설정됩니다. 선택한 레이아웃 매개 변수를 명시 적으로 추가하거나 ''및 ''을 사용하여 XML로 전체 작업을 수행하십시오 (후자를 선택합니다). – Devunwired

+0

그것은 작동합니다! 감사!! – Emmanuel

1

당신은 슬라이딩 서랍에 대해 "layoutHeight"속성을 지정됩니다. 패딩 = "10dip을"FillParent에 레이아웃 높이를 설정하고 그

+0

그건 도움이되지 못했습니다. 이제 서랍을 열면 탐색 바가 너무 좁아서 서랍이 화면 상단까지 열립니다. 110dip은 서랍 콘텐츠의 높이입니다. – Emmanuel

+0

죄송합니다. 귀하의 질문에 폭이 아니라 높이가 잘못 이해되었습니다. 내 잘못이야. 여하튼, 슬라이딩 서랍이 배치 된 레이아웃에 패딩 필드가 있습니까?슬라이딩 서랍을 상대 레이아웃 안에 배치했다고 가정합니다. 상위 레이아웃에 패딩 속성이 설정되어 있는지 확인하십시오. –

+0

CameronW와 동일한 내용입니다. 어디에서나 모든 패딩을 제거했지만 여전히 도움이되지 않습니다. 왼쪽과 오른쪽의 검은 영역은 패딩 때문이 아닙니다. – Emmanuel

1
<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"> 

.. 공지 사항 안드로이드를해야한다. 슬라이딩 서랍의 너비가 부모를 채우고 있지만 네면 모두에 10dip이 있습니다. 당신은 여전히 ​​상단과 하단에 패딩을 원하는 경우, 수행

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

나는 그것을 시도했지만 아무 변화가 없다. – Emmanuel

+0

@Emmanuel android : padding = "10dip"을 삭제 했습니까? 당신이하고 아직도 확장하지 않는 경우에, 부모 배치에있는 동일한 것을 검사하십시오. SlidingDrawer가 포함 된 레이아웃이 여백, 패딩 등으로 인해 화면을 완전히 채우지 않으면 SlidingDrawer 자체가 – Cameron

+0

@Emmanuel이 될 수 없습니다. LinearLayout에는 android : padding = "3px"가있어 전체 화면을 채우지 못하게합니다. . – Cameron

2

보기를 추가하는 동안 LayoutParams을 제공해야합니다.

container.addView(layout, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
+0

그건 아마도 작동 할 것입니다 ... 다른 솔루션은 내 필요에 더 잘 맞습니다. 어쨌든 고마워. – Emmanuel

관련 문제