2010-03-16 3 views
6

Android 1.5의 목록보기를 사용하여 이미지 옆에 이미지 및 텍스트 목록을 표시합니다. 나는 텍스트를 세로로 가운데에 놓으려고 노력하고 있지만, 텍스트는 가운데에 정렬되지 않고 행의 맨 위에 있습니다.상대 레이아웃을 사용하여 목록 내의 항목을 세로로 정렬하려면 어떻게합니까?

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/row" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dip"> 

    <ImageView android:id="@+id/item_image" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:paddingRight="10dip" 
     android:src="@drawable/default_image" android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentBottom="true" 
     android:layout_centerVertical="true" 
     android:gravity="center_vertical"/> 

    <TextView android:id="@+id/item_title" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:layout_toRightOf="@id/item_image" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentBottom="true" 
     android:layout_centerVertical="true" 
     android:gravity="center_vertical" 
     /> 

</RelativeLayout> 

그것은 수직으로 텍스트를 중심에 내가 노력하고있을 때 나는 = "true"로 alignParentTop를 설정할 필요가 이상한 것 같다,하지만 내가 할 경우 텍스트도 표시되지 않습니다하지 : 다음 내 레이아웃입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

16

편집 :

그것은 RelativeLayout의이 일을 밝혀 쉬운 일이 아니다. 대답의 맨 아래에 원하는 효과를주는 RelativeLayout이 포함되어 있지만 ListView에 포함될 때까지만 수행됩니다. 그 후 질문에서 설명한 것과 동일한 문제가 발생했습니다. 이것은 대신에 LinearLayout (s)을 사용하여 수정되었습니다.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingLeft="10dp" 
    android:orientation="horizontal"> 

    <ImageView android:id="@+id/pickImageImage" 
     android:layout_width="100dp" 
     android:layout_height="80dp" 
     android:background="@drawable/icon" 
     android:scaleType="fitXY" 
     android:layout_marginRight="10dp"/> 

    <TextView android:id="@+id/pickImageText" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 
     android:gravity="left|center_vertical" 
     android:text="I'm the text"/> 

</LinearLayout> 

당신은 당신이 중첩 이미지 뷰 후 orientation="vertical"초하고있는 LinearLayout 할 수있는 다음 거기에 텍스트 상자를 넣어, 두 개의 텍스트 상자를 갖고 싶어.

이 방법이 효과적이지만, RelativeLayouts가 왜 그런지 모르겠습니다. 예를 들어,이 blog post by Romain Guy은 구체적으로 RelativeLayout이 있어야한다고 말합니다. 내가 그것을 시도했을 때, 나는 그것을 꽤 일하게 만들지 못했다. 그가 정확하게 그랬듯이 나는 정확히을하지는 않았지만, TextViews의 일부 속성을 변경했을뿐입니다.

난 당신이 RelativeLayout의 모든 사람들 다소 모순 된 지시와 안드로이드를 혼동 있다고 생각 :


여기에 원래의 대답. 이 형식으로 다시 포맷했습니다.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/row" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dip"> 

    <ImageView android:id="@+id/item_image" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingRight="10dip" 
     android:src="@drawable/icon" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true"/> 

    <TextView android:id="@+id/item_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@id/item_image" 
     android:layout_centerVertical="true" 
     android:text="Blah!"/> 

</RelativeLayout> 

그리고 제대로 작동합니다. 나는 당신의 여분 android:layout_alignParentxxx의 많은 것을 제거했다. 이제이보기는 왼쪽 상단 모서리에 그림이 있고 그 옆에 텍스트가 세로로 배치되어 있습니다. 그림을 세로로 가운데에 배치하려면 RelativeLayout이 그림의 높이보다 크지 않으므로 android : layout_height = "wrap_content"에있을 수 없습니다. 높이를 지정해야합니다 (예 : 80dp로 설정하고 ImageView를 android : scaleType = "fitXY"로 60dp와 같은 고정 높이로 설정하여 크기를 적절하게 맞 춥니 다.

+0

시험해 주셔서 감사합니다. 레이아웃이 이미지보다 크지 않기를 바랄 것이므로 이미지는 괜찮습니다.나는 당신의 XML을 시험해 보았고, 내가 본 것과 똑같은 것을 보았다. android : layout_alignParentTop = "true"를 TextView에 추가하지 않으면 텍스트가 표시되지 않으며 당연히 중앙에 정렬되지 않고 상단 정렬됩니다. ListView 안에 귀하의 것을 넣었습니까? –

+0

흠. 자체적으로 뷰일 때 제대로 작동했지만 ListView에 추가 한 후 예, 작동하지 않습니다. 방금 몇 가지 시도했지만 RelativeLayout을 사용해야하는 방식은 아무 것도 없습니다. LinearLayout을 사용하여 동일한 효과를 얻을 수 있습니다. 방향을 horizontal로 설정하고 TextView 높이를 center_vertical 중력으로 fill_parent로 만듭니다. 아이콘 옆에 여러 개의 TextViews가 있으면 두 번째 세로 LinearLayout 안에 넣을 수 있습니다. 이것은 우아하지 않지만 RelativeLayouts가 작동하지 않는 이유를 해결할 수 없습니다 ... –

+0

LinearLayout에 대한 답변을 편집 할 수 있습니까? 그것은 작동하는 것 같습니다. –

0

Baseline 지시어가 사용하지만 ImageView는 오늘 기준 기준 정렬을 지원하지 않습니다. ImageView의 하위 클래스를 만들고 getBaseline() 메서드를 재정 의하여 이미지 높이를 반환하여이 문제를 해결할 수 있습니다. 코멘트 다음

+0

감사합니다. 오늘 밤이 기능을 사용해 보겠습니다. ImageView를 서브 클래스 화해야하는 것은 고통 스러울 것 같지만 시도해 보겠습니다. –

1

는 잠시 동안 유사한 문제에 붙어 있지만, CommonsWare에서이 발견되었다 :

"당신이 레이아웃을 팽창 할 때, 부모가있는 ListView입니다 inflate(R.layout.whatever, parent, false)를 사용합니다."

행의 높이를 특정 값으로 설정할 때만 작동합니다 (즉, wrap_content를 사용할 수 없음).