15

我已經創建了一個使用ScrollView的佈局,其中PercentRelativeLayout作爲其子。它不適用於棒棒糖和較舊的設備,但在棉花糖設備上運行良好。請在下面檢查代碼:ScrollView中的PercentRelativeLayout

<ScrollView 
    android:id="@+id/scrollView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fillViewport="true"> 

    <android.support.percent.PercentRelativeLayout 
     android:id="@+id/scrollContent" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:layout_heightPercent="100%" 
     app:layout_widthPercent="50%"> 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@android:color/holo_red_dark" 
      android:text="kkjknadko" 
      android:textColor="@android:color/black" 
      app:layout_heightPercent="10%" 
      app:layout_widthPercent="50%"/> 

     <TextView 
      android:id="@+id/textView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/textView1" 
      android:text="Abcaad" 
      android:textColor="@android:color/black" 
      app:layout_heightPercent="10%" 
      app:layout_marginTopPercent="10%" 
      app:layout_widthPercent="50%"/> 

     <TextView 
      android:id="@+id/textview3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/textview2" 
      android:background="@android:color/holo_red_dark" 
      android:text="Abcd" 
      android:textColor="@android:color/black" 
      app:layout_heightPercent="10%" 
      app:layout_marginTopPercent="10%" 
      app:layout_widthPercent="50%"/> 

     <TextView 
      android:id="@+id/textview4" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/textview3" 
      android:text="Abcd" 
      android:textColor="@android:color/black" 
      app:layout_heightPercent="10%" 
      app:layout_marginTopPercent="10%" 
      app:layout_widthPercent="50%"/> 

     <TextView 
      android:id="@+id/textview5" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/textview4" 
      android:background="@android:color/holo_red_dark" 
      android:text="Abcd" 
      android:textColor="@android:color/black" 
      app:layout_heightPercent="10%" 
      app:layout_marginTopPercent="10%" 
      app:layout_widthPercent="50%"/> 

     <TextView 
      android:id="@+id/textview6" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/textview5" 
      android:text="Abcd" 
      android:textColor="@android:color/black" 
      app:layout_heightPercent="10%" 
      app:layout_marginTopPercent="10%" 
      app:layout_widthPercent="50%"/> 

     <TextView 
      android:id="@+id/textview7" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/textview6" 
      android:text="Abcd" 
      android:textColor="@android:color/black" 
      app:layout_heightPercent="10%" 
      app:layout_marginTopPercent="10%" 
      app:layout_widthPercent="50%"/> 

     <TextView 
      android:id="@+id/textview8" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/textview7" 
      android:text="Abcd" 
      android:textColor="@android:color/black" 
      app:layout_heightPercent="10%" 
      app:layout_marginTopPercent="10%" 
      app:layout_widthPercent="50%"/> 

    </android.support.percent.PercentRelativeLayout> 
</ScrollView> 

而且我也android:fillViewport="true",它不會顯示在任何棒棒糖和較舊的Android版本。

不幸的是,百分比佈局不適用於M之前的ScrollView。其原因在於它們取決於測量步驟中提供的尺寸提示。在M之前,大多數佈局會在發送未指定的測量規格時提供尺寸提示0。

您可以嘗試創建自己的ScrollView 和壓倒一切的measureChildmeasureChildWithMargins 子類(幸好都被保護),提供大小提示修復。

source - plus.google.com。

有人可以幫我創建自定義ScrollView使它工作嗎?

+0

嘗試使用NestScrollView而不是滾動型。 –

+0

我試過,但它不起作用 –

回答

0

問題據我所知:我希望這些TextViews是父視圖寬度的50%。

方式,對我的工作原理是:

<Space 
    android:layout_width="20dp" 
    android:layout_height="20dp" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:id="@+id/space" /> 

然後allign視角(S)這一點。無論是RelativeLayout還是TextViews。你失去了對RelativeLayout百分比的控制(如果你有過)。我傾向於採取類似的方式:

android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceMedium" 

這有幫助嗎?

+0

不,實際上我必須讓percentRelativeLayout在scrollview中工作。我只是舉了上面的例子來展示這個場景與我正在使用的不完全相同 –

7

創建一個定製scrollview並設置Measured HeightWidth正如你在XML想它爲例

CustomScrollView

public class CustomScrollView extends ScrollView { 


    public CustomScrollView(Context context) { 
     super(context); 
    } 

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

    public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    public CustomScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     int size = 0; 
     int width = getMeasuredWidth(); 
     int height = getMeasuredHeight(); 

     if (width > height) { 
      size = height; 
     } else { 
      size = width; 
     } 
     setMeasuredDimension(size, size); 
    } 
} 

使用customscrollview

<yourscrollviewclasspath.CustomScrollView   // here you have scrollview path like com.yourpackage.folder_where_your_scrollview_lies 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/scrollView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fillViewport="true" 
     > 
</yourscrollviewclasspath.CustomScrollView > 

enter image description here 希望這會有所幫助。

0

我遇到了Android K和Android的L.

同樣的問題,你也可以使用約束佈局,而不是百分比相對佈局,但似乎有太多的滾動這一問題。即使在其他答案中建議的自定義滾動視圖對我也沒有幫助。

雖然有辦法。

將您的百分比相對佈局轉換爲相對佈局,並根據您的設備高度以編程方式設置視圖的高度。

在使用相對佈局進行滾動時似乎沒有問題。您可以在TextView之間使用'空間'視圖來獲得空白。這不是一個非常優雅的解決方案,但對我來說它工作。

Java代碼:

int height = getWindowManager().getDefaultDisplay().getHeight(); 
int width = getWindowManager().getDefaultDisplay().getWidth(); 

// to set height to each textview to 10% of screen 
textView1.getLayoutParams().height = (int) (height * 0.10); 
textView2.getLayoutParams().height = (int) (height * 0.10); 
textView3.getLayoutParams().height = (int) (height * 0.10); 
textView4.getLayoutParams().height = (int) (height * 0.10); 
textView5.getLayoutParams().height = (int) (height * 0.10); 
textView6.getLayoutParams().height = (int) (height * 0.10); 

// to set width to each textview to 50% of screen 
textView1.getLayoutParams().width = (int) (width * 0.50); 
textView2.getLayoutParams().width = (int) (width * 0.50); 
textView3.getLayoutParams().width = (int) (width * 0.50); 
textView4.getLayoutParams().width = (int) (width * 0.50); 
textView5.getLayoutParams().width = (int) (width * 0.50); 
textView6.getLayoutParams().width = (int) (width * 0.50); 

// for margin between textviews 
space1.getLayoutParams().height = (int) (height * 0.10); 
space2.getLayoutParams().height = (int) (height * 0.10); 
space3.getLayoutParams().height = (int) (height * 0.10); 
space4.getLayoutParams().height = (int) (height * 0.10); 
space5.getLayoutParams().height = (int) (height * 0.10); 

XML代碼:

<ScrollView 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/scrollView" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fillViewport="true"> 

<RelativeLayout 
    android:id="@+id/scrollContent" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@android:color/holo_red_dark" 
     android:text="kkjknadko" 
     android:textColor="@android:color/black"/> 

    <android.support.v4.widget.Space 
     android:id="@+id/space1" 
     android:layout_below="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:id="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/space1" 
     android:text="Abcaad" 
     android:textColor="@android:color/black"/> 

    <android.support.v4.widget.Space 
     android:id="@+id/space2" 
     android:layout_below="@+id/textView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:id="@+id/textView3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/space2" 
     android:background="@android:color/holo_red_dark" 
     android:text="Abcd" 
     android:textColor="@android:color/black"/> 

    <android.support.v4.widget.Space 
     android:id="@+id/space3" 
     android:layout_below="@+id/textView3" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" /> 

    <TextView 
     android:id="@+id/textView4" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/space3" 
     android:text="Abcd" 
     android:textColor="@android:color/black"/> 

    <android.support.v4.widget.Space 
     android:id="@+id/space4" 
     android:layout_below="@+id/textView4" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" /> 

    <TextView 
     android:id="@+id/textview5" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/space4" 
     android:background="@android:color/holo_red_dark" 
     android:text="Abcd" 
     android:textColor="@android:color/black"/> 

    <android.support.v4.widget.Space 
     android:id="@+id/space5" 
     android:layout_below="@+id/textview5" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" /> 

    <TextView 
     android:id="@+id/textview6" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/space5" 
     android:text="Abcd" 
     android:textColor="@android:color/black"/> 

</RelativeLayout>