2012-08-17 56 views
4

我一直被困在這個幾天了,無法弄清楚我做錯了什麼(希望它不是我錯過的東西)。在一個片段中的可滾動視圖

要求

我有一個包含片段,片段的LinearLayout一個FragmentPager。該佈局有一個按鈕和一個視圖,可以根據用戶導航進行更改。

所有的視圖,如GridView和ListView都能很好地工作。但我需要提出另一種適合概念上有點不同的片段的觀點。該視圖必須是可垂直滾動的,因爲它的高度可能比屏幕大。我不在乎視圖是以編程方式創建的,還是動態地從.xml中誇大。我嘗試了兩種方法,兩者都給出了相同的結果。

溶液1(非常更優選)

我試圖使自定義視圖,並推動它滾動型的內部。這是相關的.xml:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/scroller" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:fillViewport="true" > 
    <com.myPackage.MyView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" > 
</com.myPackage.MyView> 
</ScrollView> 

我使自定義視圖顯示一個非常大的矩形,因此它超過了屏幕大小。爲MyView的 代碼:

package com.myPackage.MyView; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.view.View; 

public class MyView extends View { 
    public MyView(Context context) { 
     super(context); 
    } 

    public MyView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     Paint paint = new Paint(); 
     paint.setColor(Color.RED); 
     canvas.drawRect(0, 0, 100, 8000, paint); 
    } 
} 

這樣做的問題是,ScorllView不會滾動。

我試圖刪除fillViewport(正如我在不同的答案中看到的),導致什麼都沒有顯示, 我也嘗試添加ScrollView內外的佈局,但沒有。嘗試所有「fill_parent」/「wrap_content」組合也導致使用非滾動ScrollView。

我在做什麼錯?

解決方案2(更不用說最好)

我可以強制(殘酷)視圖的概念變成一個ListView,它不滾動不錯,但我無法得到的列表中顯示裏面的我的意見自定義視圖。調試,我注意到onDraw永遠不會被調用。我是否需要在其他地方實現視圖的繪圖,以便在ListView中繪製它?

+0

您可以發佈com.myPackage.MyView的代碼嗎? – 2012-08-17 10:47:05

+0

用com.myPackage.MyView的代碼編輯 – 2012-08-17 11:02:36

+1

你真的想要滾動什麼內容?我認爲它不滾動的原因是,當你在畫布上繪製一個Rect時,視圖不會調整大小,它只是顯示它適合視圖的那部分。 – 2012-08-17 11:19:11

回答

1

Iain_b是正確的,當繪製一個視圖時,它會剪切任何不在其佈局範圍內的東西。對於自定義視圖,通常通過重寫OnMeasure方法來完成。目前,您已將自定義視圖的高度設置爲wrap_content,在您的情況下,這將導致視圖的高度爲0(它沒有內容)。不幸的是,OnMeasure意味着你不能使用你的自定義視圖的高度和寬度屬性,但是當Android執行佈局傳遞時,你將在OnMeasure調用中有更多更好的控制。

這是這裏的Android文檔中的所有描述:Custom Components

+0

你是對的。完全忘了onMeasure的事情。 – 2012-08-17 12:01:18

1
<ScrollView> 
//your textview goes here 
</ScrollView> 

舉例來說,如果你有一個TextView,你希望它是滾動的,那麼你可以使用滾動型像上面給出。

確保您在ScrollView中嵌套了一個TextView

相關問題