2016-09-30 108 views
1

我試圖讓一個「play」圖標的圖像出現在我在LinearLayout中的列表項的右側。Android LinearLayout,無法讓圖像出現在LinearLayout的右邊

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

    <ImageView 
     android:id="@+id/album_image" 
     android:layout_width="@dimen/list_item_height" 
     android:layout_height="@dimen/list_item_height" /> 

    <LinearLayout 
      android:id="@+id/text_container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="center_vertical" 
      android:orientation="vertical" 
      android:paddingLeft="16dp"> 
     <TextView 
      android:id="@+id/artist_name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      tools:text="Artist" /> 

     <TextView 
      android:id="@+id/song_name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      tools:text="Song Name" /> 
    </LinearLayout> 

    <ImageView 
     android:id="@+id/play" 
     android:layout_width="@dimen/list_play_icon_height" 
     android:layout_height="@dimen/list_play_icon_height" 
     android:layout_gravity="center_vertical" 
     android:paddingRight="8dp" 
     android:src="@drawable/song_play" /> 
</LinearLayout> 

但是,由於某種原因,圖像出現在屏幕外(如下圖所示)。

Android LinearLayout Problem

我走在移動應用程序開發的一類了,所以我不是100%熟悉每一個佈局呢。這是什麼造成的?

回答

3

您已設置text_container的寬度爲match_parent。你應該設置爲0dp並添加layout_weigh這個元素

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

    <ImageView 
     android:id="@+id/album_image" 
     android:layout_width="@dimen/list_item_height" 
     android:layout_height="@dimen/list_item_height" /> 

    <LinearLayout 
      android:id="@+id/text_container" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:gravity="center_vertical" 
      android:orientation="vertical" 
      android:paddingLeft="16dp"> 
     <TextView 
      android:id="@+id/artist_name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      tools:text="Artist" /> 

     <TextView 
      android:id="@+id/song_name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      tools:text="Song Name" /> 
    </LinearLayout> 

    <ImageView 
     android:id="@+id/play" 
     android:layout_width="@dimen/list_play_icon_height" 
     android:layout_height="@dimen/list_play_icon_height" 
     android:layout_gravity="center_vertical" 
     android:paddingRight="8dp" 
     android:src="@drawable/song_play" /> 
</LinearLayout> 
+0

就是這樣。非常感謝! –

+0

@DarinBeaudreau我很樂意爲您效勞。不客氣 –

+0

您可以使這個少一點本地化? –

0

可能是因爲text_container LinearLayout的寬度爲match_parent。嘗試將其更改爲wrap_conent

+0

是的,這是做到了。但現在它正在文本旁邊徘徊。我試過使用android:layout_gravity =「right | center」來讓它堅持正確的,但是這沒有幫助。我應該將textContainer的權重設置爲1嗎? –

0

我非常新的Android的開發太多,但讓我知道如果這能解決它:

我相信你正在運行到這個問題引起你的第二個定義的線性佈局具有match_parent的寬度和高度,在這種情況下,您應該使用wrap_content。因爲您的match_parent正在將其設置爲與之前的佈局相同的大小,這是設備屏幕的大小,並將設備屏幕參數以外的圖像推出。

所以你的代碼應該是:

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

    <ImageView 
     android:id="@+id/album_image" 
     android:layout_width="@dimen/list_item_height" 
     android:layout_height="@dimen/list_item_height" /> 

    <LinearLayout 
      android:id="@+id/text_container" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center_vertical" 
      android:orientation="vertical" 
      android:paddingLeft="16dp"> 
     <TextView 
      android:id="@+id/artist_name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      tools:text="Artist" /> 

     <TextView 
      android:id="@+id/song_name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      tools:text="Song Name" /> 
    </LinearLayout> 

    <ImageView 
     android:id="@+id/play" 
     android:layout_width="@dimen/list_play_icon_height" 
     android:layout_height="@dimen/list_play_icon_height" 
     android:layout_gravity="center_vertical" 
     android:paddingRight="8dp" 
     android:src="@drawable/song_play" /> 
</LinearLayout> 
+0

此解決方案將顯示未在父代LinearLayout右側對齊的圖像。 –

0

我改變了圖標和大小不變,所以我可以預覽佈局在我的Android工作室。 如果是我,我會將外部佈局更改爲RelativeLayout,但也可以像您那樣完成。

您會注意到android:layout_width不是使用權重的元素的最終大小,權重屬性將重新配置視圖。擾流板:如果有很多嵌套佈局,這是一個昂貴的操作,因此我更喜歡RelativeLayout。但是這個很簡單。

您必須在父佈局的子項中使用layout_weight來分配可用空間。

這就是:

enter image description here

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:padding="4dp" 
    > 

    <ImageView 
     android:id="@+id/album_image" 
     android:layout_width="55dp" 
     android:layout_height="55dp" 
     android:src="@android:drawable/star_on" 
     /> 

    <LinearLayout 
     android:id="@+id/text_container" 
     android:layout_width="10dp" 
     android:layout_height="match_parent" 
     android:gravity="center_vertical" 
     android:orientation="vertical" 
     android:paddingLeft="16dp" 
     android:layout_weight="8"> 
     <TextView 
      android:id="@+id/artist_name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      tools:text="Artist" /> 

     <TextView 
      android:id="@+id/song_name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      tools:text="Song Name" /> 
    </LinearLayout> 

    <ImageView 
     android:id="@+id/play" 
     android:layout_width="55dp" 
     android:layout_height="55dp" 
     android:layout_gravity="center_vertical" 
     android:paddingRight="8dp" 
     android:src="@android:drawable/ic_media_play" 
     android:layout_weight="1"/> 
</LinearLayout> 

希望這有助於! =)

+0

@Darin Beaudreau你能解決你的問題嗎?讓我知道這是否有幫助=) – HenriqueMS