2013-08-06 34 views
1

我有一個數據輸入類型的活動,並使用線性佈局im均勻地分隔文本視圖和edittexts集。然後我有一個滾動視圖,它應該可以讓用戶在softkeyboard啓動時滾動。 如果我使用android:fillViewport,linearlayout可以正常工作並填充屏幕並均勻分佈每個項目,但是當鍵盤出現並停止每個項目均勻展開時。如果我使用android:windowSoftInputMode="stateVisible|adjustPan"那麼linearlayout仍然散開,但滾動視圖不工作了(從所有未解決的帖子上,我不認爲你可以有adjustPan工作滾動視圖)scrollview內的Linearlay與偶數分佈

有沒有什麼辦法在scrollview中有一個線性佈局,其中的項目均勻分佈並且仍然可以工作,而softkeyboard則不會改變線性佈局?

 <?xml version="1.0" encoding="utf-8"?> 
      <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fillViewport 
      > 


     <LinearLayout 
      android:gravity="left" 
      android:orientation="vertical" 
      android:id="@id/tab2" 
      android:paddingLeft="40.0dip" 
      android:paddingTop="0.0dip" 
      android:paddingRight="40.0dip" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      > 



     <LinearLayout 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_weight="1.0"> 
     <TextView 
       android:id="@id/textViewBrand" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/brand" /> 

     <AutoCompleteTextView 
      android:id="@id/editTextBrand" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      > 

     </AutoCompleteTextView> 
     </LinearLayout> 

    ...more linearlayouts with textview and edittext to be spaced out evenly 

回答

0

也許滾動型不工作,因爲你的

安卓layout_height屬性

被定義爲match_parent。你必須把

WRAP_CONTENT

+0

感謝您的答案,但如果我layout_height設置爲wrap_content那麼的LinearLayout內的所有項目沒有全面鋪開的頁面,但只是堆疊ontop的對方,並滾動視圖還不能與adjustPan工作組 – Thomas

0
Follow This Code, I hope it resolves your Problem 

<?xml version="1.0" encoding="utf-8"?> 

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    //Your Main Layout 

    <LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"  
    android:weightSum="100"> 

    // First Sub Layout Under Main Layout 
     <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="horizontal" 
     android:layout_weight="10" 
     android:weightSum="100" > 

      <TextView 
      android:id="@+id/textView1" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="TextView" 
      android:layout_weight="70" /> 

      <EditText 
      android:id="@+id/editText1" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="30" /> 

     </LinearLayout>// Finishing First Sub layout 

// Second Sub Layout Under Main Layout 
     <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="horizontal" 
     android:layout_weight="10" 
     android:weightSum="100" > 

      <TextView 
      android:id="@+id/textView2" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:text="TextView" 
      android:layout_weight="70" /> 

      <EditText 
      android:id="@+id/editText2" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="30" /> 

     </LinearLayout>// Finishing Second Sub layout 

similarly for 3rd,4rth,5th sub layouts and so on........ 

</LinearLayout> // Finishing Main Layout 
</ScrollView> // Finishing ScrollView 
+0

嘿謝謝你的回答,但這只是所有的項目堆積在頂部 – Thomas

1

設置屬性的android:fillViewport = 「真」 在你的滾動視圖,將工作

0

,你可以去在的LinearLayout子視圖並使用ViewTreeObserver.OnGlobalLayoutListener自己將代碼大小設置爲固定大小。 以下代碼將尺寸設置爲不更改,因此您可以使用帶權重的android:fillViewport選項,然後實質上刪除權重,但保留計算的尺寸。

我對這段代碼進行了一些修改,以確保子視圖均勻分佈在ScrollView內部的LinearLayout中,其中LinearLayout對於android:fillViewport選項來說太大而無法使權重實際工作。這是通過對孩子進行2次迭代完成的。首先獲取最大視圖的高度,然後將所有子視圖設置爲最大高度。

private void distributeViewsEvenlyInLinearLayout() { 
    ViewTreeObserver observer = linearParentView.getViewTreeObserver(); 
    final ViewTreeObserver.OnGlobalLayoutListener globalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { 

     @SuppressWarnings("deprecation") 
     public void onGlobalLayout() { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
       linearParentView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
      } else { 
       linearParentView.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
      } 

      for (int i = 0; i < linearParentView.getChildCount(); i++) { 
       View child = linearParentView.getChildAt(i); 
       LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, child.getHeight()); 
       child.setLayoutParams(layoutParams); 
      } 
     } 
    }; 
    observer.addOnGlobalLayoutListener(globalLayoutListener); 
}