2012-02-19 6 views
9

저는 앱에서 RelativeLayouts를 광범위하게 사용하고 있으며,이를 지정하는 방법을 알고 있다고 생각했지만 손실이 있습니다. 나는 기본적으로 4 개의 TextView를 두 줄의 두 줄에 위치시키고 있는데, 두 줄은 각각 제공 될 레이블과 텍스트로 구성됩니다.안드로이드 layout_below가 작동하지 않습니다.

출생 : 1810년 8월 23일 메이슨 (주), 켄터키

사망 : 1865년 7월 15일 신시내티, 해밀턴 (주), 오하이오

이 레이아웃의 관련 부분입니다 :

그것은 같이 보일 것이다
 <TextView android:id="@+id/birth_lbl" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/given_layout" 
      android:layout_alignLeft="@+id/given_layout" 
      android:layout_marginTop="6dip" 
      style="@style/label" 
      android:text="@string/born" 
     /> 
     <TextView android:id="@+id/birth" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@+id/birth_lbl" 
      android:layout_alignBaseline="@+id/birth_lbl" 
      android:layout_marginLeft="10dip" 
      android:layout_marginRight="6dip" 
      style="@style/main_text" 
      android:text="dd Mmm yy" 
     /> 
     <TextView android:id="@+id/death_lbl" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/birth" 
      android:layout_alignLeft="@+id/birth_lbl" 
      android:layout_marginTop="4dip" 
      style="@style/label" 
      android:text="@string/died" 
     /> 
     <TextView android:id="@+id/death" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@+id/death_lbl" 
      android:layout_alignLeft="@+id/birth" 
      android:layout_alignBaseline="@+id/death_lbl" 
      android:layout_marginRight="6dip" 
      style="@style/main_text" 
      android:text="dd Mmm yy" 
     /> 

무엇인가의 이유로, 이것은 생년월일 선이 보이는 위의 사인 선보기를 표시합니다! 'layout_below = "@ + id/birth_lbl"'대신에 death_lbl 뷰의 스펙을 변경하면, 라인이 올바르게 배치됩니다! 그러나 "출생"뷰를 여러 줄로 줄이는 것이 가능하므로 두 번째 줄을 "birth_lbl"이 아닌 "birth"아래에 배치해야합니다.

누구든지이 문제가 발생하는 이유를 알고 계십니까? Eclipse의 그래픽 레이아웃 편집기와 런타임시 Android 4.0을 실행하는 태블릿 모두에서 발생합니다.

+1

'id' 선언의'+'기호는'id'의 첫 번째 모양에서만 사용해야합니다. 전체 레이아웃 파일을 편집하고 게시하여 사용하는 추가보기 ('given_layout'?)를 확인해야합니다.난 에뮬레이터에서 그것을 시도하고 그것을 위해 노력하고 있지만 당연히 나는 여분의'given_layout'보기가 필요하지 않습니다. – Luksprog

+0

Slukian이 말했듯이, Slukian이 말한대로, 당신은 당신이하고있는 것을 알지도 못합니다 ... 원하는 곳 어디에서나 '+'를 사용하지 말고 각각의 +가 새로운 변수를 만드는 것과 같다고 생각하십시오. 컴파일러가 그 말을하지 않는 이상한 ... – Cehm

+2

더 부드럽게 여기! android 21 컴파일러는 여러분이 "디자인"을 사용할 때 이러한 plusses를 넣습니다. 우리가 질문하는 이유는 당신이 말했듯이, 우리는 모른다는 것입니다. – user462990

답변

13

다시 선언 할 때보십시오이 시점에서 이미 +이 의미있는 선언되어 있기 때문에, android:layout_below="@id/birth"death_lblandroid:layout_below="@+id/birth"을 변경, 그것은 문제가 발생할 수 있습니다.

+0

감사합니다. 나는 그것을 실제로 알고 있었고 샘플 코드에서 본 것은 내가 절망적으로 시도한 것이었다 :-). 나는 같은 결과로 되돌려 놓았습니다. – gordonwd

+0

그러나 내가 할 때, 그것은 작동하지 않으며 +를 넣을 때, 그것은 작동합니다! 왜? –

0

문제는 다시 선언하더라도 상대 레이아웃에서 속성을 호출한다는 것입니다.

당신은 다음이 android:id="@+id/button" 과 같이 수행해야합니다 뷰의 ID를 선언 할 때 당신은 안드로이드 상대 레이아웃에서 다른보기 위 또는 아래에 특정 뷰를 배치 할 때이 android:layout_below="@id/textview"

과 같이 호출해야

id 버튼이있는 버튼을 선언하고 텍스트보기 아래에 배치하기를 원한다는 메시지가 표시되면, @+id을 사용하여 위치보기에 @id을 사용하지 마십시오. 당신의 + 표시를 고정하는 것은 도움이되지 않는 경우

+0

위의 내 댓글을 참조하십시오. 감사! – gordonwd

+1

이것은 완전히 정확하지 않습니다. 뷰 또는 뷰 그룹이 XML에서 다른 뷰 위에 선언되었지만 exampl toRightOf 또는 toLeftOf에 사용하려는 경우 @ + id를 사용하여 아래 뷰를 참조한 다음 해당 뷰의 ID를 설정할 때 @ + id 또는 @id를 다시 사용할 수 있습니다. view/viewgroup 자체. @ + id는 R에 ID를 추가 한 다음 앱이 빌드 될 때 관련 뷰에 연결합니다. – speedynomads

+0

@ domji84 틀렸어. 뷰를 참조 할 수 없거나 @ + id를 사용하여 모든 리소스를 참조 할 수 없다. 유일한 목적은 새 리소스를 만드는 것이다. 이 답변을 참조하십시오 http://stackoverflow.com/a/5025971/892055 –

1

, 당신은 항상 당신이 id/deathid/birth 아래에 배치하고 id/death toLeftOf id/death_label를 둘 수 있었다.

+0

그걸 시도하면 그 이드/탄생 시점 아래에 아무것도 두는 것이 싫어. 나는 더 멀리하기 전에 별도의 파일로 더 고립 된 사례를 코딩하려고 노력할 것이다. 감사! – gordonwd

1

임시적으로 해당 필드가있는 layout을 코딩하여 실제로이 현상을 복제 할 수 있었고 위의보기와 관련하여 초기에 birth_lbl보기를 배치하지 않으면 문제가 해결되었음을 확인할 수있었습니다 (" given_layout ").

이것이 해결책이 될지, 해결 방법 이냐, 아니면 괴로울 것인지 (요즘은 여전히 ​​단어입니까?), 그러나 내가 한 일은 텍스트보기를 자신의 RelativeLayout 안에 배치하는 것이 었습니다. id/given_layout을 기준으로 RelativeLayout의 위치를 ​​지정하십시오. 어떤 경우에는, 그것은 ... 내가 제약 레이아웃을 사용했기 때문에 나는 또한 같은 문제에 직면했다

2

있지만 상대 레이아웃에서 작동align_below 작동합니다. 어떤 레이아웃을 사용하고 있는지 확인하십시오.

관련 문제