在scrollview内部的Linearlayout具有均匀分布

时间:2013-08-06 10:42:49

标签: android layout scrollview android-linearlayout

我有一个数据输入类型活动,我使用线性布局来均匀地分隔textview和edittexts。然后我有一个滚动视图,它应该使用户可以在软键盘启动时滚动。 如果我使用android:fillViewport线性布局正常工作并填充屏幕并均匀地展开每个项目,然后当键盘出现时停止每个项目均匀展开。如果我使用android:windowSoftInputMode="stateVisible|adjustPan",那么线性布局仍然分散,但滚动视图不再起作用(来自所有未解决的帖子,我认为你不能使用adjustPan工作滚动视图)

有没有办法在滚动视图中设置一个linearlayout,项目均匀展开并且在软键盘启动时仍可正常工作而不更改线​​性布局?

     <?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

4 个答案:

答案 0 :(得分:1)

在你的scrollview中设置属性android:fillViewport =“true”它将起作用

答案 1 :(得分:0)

可能因为您的

而ScrollView无法正常工作
  

android:layout_height属性

定义为match_parent。你必须把

  

WRAP_CONTENT

答案 2 :(得分: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 

答案 3 :(得分: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);
}