2013-06-10 6 views
10

私は、画面より大きなサイズのウェイトを持つ垂直線形レイアウトを作成しようとしています。画面のサイズの2倍としましょう。これが機能するためには、私は明らかにそれをスクロールできる必要があります。残念ながら、私はこれを行う方法を理解することはできません。私はレイアウトの重みを使用して、すべてのコンポーネントの重みの実際の合計の半分として重量の合計を設定しようとしました(したがって、すべてのコンポーネントの重みの合計が20の場合、私は10として重みの合計を設定します)スクロールは何らかの理由でもう動作しません。アンドロイドで画面よりも大きなウェイトでスクロール可能な線形レイアウト

紛失しているものはありますか?

これは、スクリーンとしてのLinearLayoutが2倍の大きなりますが、スクロールが動作していないコードです:

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

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:weightSum="2"> 

     <EditText android:id="@+id/id1" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:textSize="25dp" 
      android:gravity="center" 
      android:layout_weight="2"/> 

     <EditText android:id="@+id/id2" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:textSize="25dp" 
      android:gravity="center" 
      android:layout_weight="2"/> 

    </LinearLayout> 
</ScrollView> 

答えて

7

あなたのコメントに基づいて、ここではあなたが探しているものを達成するプログラム的な方法があります。私は純粋なレイアウトのXMLでこれを達成する方法があるとは思わない。

レイアウト:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_horizontal" 
    android:background="#000000" 
    android:fillViewport="true" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#FFFFFF" 
     android:orientation="vertical" > 

     <EditText 
      android:id="@+id/id1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#DCDCDC" 
      android:gravity="center" 
      android:text="ONE ONE ONE" 
      android:textIsSelectable="false" 
      android:textSize="45sp" /> 

     <EditText 
      android:id="@+id/id2" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#AAAAAA" 
      android:gravity="center" 
      android:text="TWO TWO TWO" 
      android:textIsSelectable="false" 
      android:textSize="45sp" /> 

     <EditText 
      android:id="@+id/id3" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#777777" 
      android:gravity="center" 
      android:text="THREE THREE THREE" 
      android:textIsSelectable="false" 
      android:textSize="45sp" /> 
    </LinearLayout> 

</ScrollView> 

活動:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Get display size -- API L13 and up. Otherwise use getResources().getDisplayMetrics(); 
     Display display = getWindowManager().getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 


     // You want size to be 50% per EditText, so divide available height by 2. 
     // Note: this is absolute height, does not take into consideration window decoration! 
     int editTextHeight = size.y/2; 

     // Get a handle to your EditTexts 
     EditText t1 = (EditText) findViewById(R.id.id1); 
     EditText t2 = (EditText) findViewById(R.id.id2); 
     EditText t3 = (EditText) findViewById(R.id.id3); 

     // Set height to 50% of screen size each 
     t1.setHeight(editTextHeight); 
     t2.setHeight(editTextHeight); 
     t3.setHeight(editTextHeight); 
} 

それをやります。最終結果:

EditText 50% screen height EditText 50% screen height EditText 50% screen height

+2

私はこれをプログラム的に行う方法を知っていましたが、純粋なxmlで行うことができないことを確認するだけでも、 –

1

ここでの問題はlayout_weightweightSumの使用が無効です。 android:layout_weightは利用可能な残りのスペースがであることを覚えておくことが重要です。その境界を超えるものは自動的に切り取られます。

したがって、あなたの例では、最初のEditTextは、画面全体を占めており、2番目の一方が完全にビューから除外されます。 2番目のEditTextが切り取られているため、LinearLayoutは画面全体を撮影しており、ScrollViewには何もしません。

最終目標が何であるかは完全にはわかりません。ユーザーの入力に合わせてテキスト入力を増やそうとしていますか?ScrollViewがオーバーフローを処理していますか?

もしそうなら、これは動作します:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_horizontal" 
    android:background="#000000" 
    android:fillViewport="true" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#FFFFFF" 
     android:orientation="vertical" > 

     <EditText 
     android:id="@+id/id1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#DCDCDC" 
     android:gravity="center" 
     android:text="ONE ONE ONE" 
     android:textIsSelectable="false" 
     android:textSize="45sp" /> 

    <EditText 
     android:id="@+id/id2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#AAAAAA" 
     android:gravity="center" 
     android:text="TWO TWO TWO" 
     android:textIsSelectable="false" 
     android:textSize="45sp" /> 
    </LinearLayout> 

</ScrollView> 

各アイテムは、レイアウトプレビューで&端を開始する場所あなたが見ることができるように、私はいくつかの基本的な背景色を用意しました。最初のEditTextを入力すると、正しくスクロールバーが作成されます。

また、の代わりにspを使用して、textSizeの値にする必要があります。

編集:解説のために、weightSumになりますので、必要に応じてスペースを取り除いてください。これをテストするにはLinearLayoutweightSumを2に設定し、android:layout_weight="1"をそれぞれのEditTextコントロールに追加します。ビューがロードされると、最後の結果は50/50に分割され、最初のコントロールで入力を開始すると、それに応じて2番目のスペースが縮小されます。 2番目のコントロールにテキストを追加すると、スクロールバーが表示されます。

+0

こんにちは。返信いただきありがとうございます。基本的には、1つの文章で、私が達成しようとしていることの良い例は、画面サイズの1/2のサイズの3つのテキストビューです。つまり、2が画面に表示され、3つ目がスクロールするときにのみ表示されます。 –

+1

純粋なXMLでこれを行う方法はありません。画面を測定し、コード内の高さを設定する必要があります。私はあなたのためのサンプルを提供することができます。 –

+0

@ sakiskaliakoudasあなたが0dpとleyout_weightを0.5 –

3

あなたは、その親の高さと同じであるあなたのLinearLayout "match_parent" の高さを宣言しました。コンテンツがScrollViewより大きい限り、スクロールしません。まず、(50dp)またはwrap_contentのような固定された高さを与えなければなりません。またはプログラムの高さ(2倍の画面の高さなど)を設定する必要があります。

weightSumweightは、あなたのアイテムを現在のサイズのLinearLayoutsに合わせるように強制しますので、使用しないでください。

こちらがお役に立てば幸いです。

関連する問題