2017-04-02 4 views
0

を失い、私はこのレイアウトを持っている:(アンドロイド)プログラムで満たされますscrollviewがタイトル

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_centerInParent="true" 
    android:layout_centerVertical="true" 
    android:background="#000" 
    android:gravity="center_horizontal|center_vertical" 
    android:orientation="vertical"> 

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:gravity="center_horizontal|center_vertical"> 

     <LinearLayout 
      android:id="@+id/linearLayout1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:gravity="center" 
      android:orientation="vertical"> 


      <TextView 
       android:id="@+id/title" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:contentDescription="@string/play" 
       android:gravity="center_horizontal" 
       android:scaleType="centerInside" 
       android:text="@string/highScores" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:textColor="#fff" /> 

      <View 
       android:layout_width="1dp" 
       android:layout_height="20dp"></View> 


      <TableLayout 
       android:id="@+id/container" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center_vertical|center_horizontal"> 

      </TableLayout> 

     </LinearLayout> 

    </ScrollView> 

</LinearLayout> 

私はこのような要素を 'コンテナ' TableLayoutを埋める:

layout.addView(buildTitleRow()); 

    for (int i = 0; i < users.length(); i++) { 

     JSONObject parent = (JSONObject) users.get(i); 

     layout.addView(buildRowFrom(parent, i + 1)); 
    } 

がbuildTitleRow:

private TableRow buildTitleRow(){ 

    TableRow result = new TableRow(this); 

    int color = Color.parseColor("#ffff00"); 

    View view = new View(this); 
    view.setMinimumWidth(10); 
    result.addView(view); 

    view = new View(this); 
    view.setMinimumWidth(10); 
    result.addView(view); 

    //the same for other views   

    return result; 
} 

buildRowFrom:

これは実際にはスクロールが場所を取るために必要になるまでよく働く
private TableRow buildRowFrom(final JSONObject element, int counter) throws JSONException { 

    TableRow result = new TableRow(this); 

    String rowName = element.getString("name"); 

    int color = Color.parseColor("#00ff00"); 

    if(rowName.equals(userName)){ 
     color = Color.parseColor("#ffffff"); 
    } 

    TextView textView = new TextView(this); 
    textView.setText(counter + "."); 
    textView.setTextColor(color); 
    result.addView(textView); 

    //some other views 

    return result; 
} 

...画面の高さよりも多くの要素があるいったん

テーブルは(幸運にも)スクロール可能なままですが、オリジナルの「タイトル」のTextViewはdoesnの

誰かが、画面のサイズよりももう1つの要素が追加された状態になるようにレイアウトを微調整する方法を知っていますか?いいえ、それ以上表示されません。

どうもありがとう、

S.

答えて

1

私はあなたのコードを試してみましたが、あなたのxmlレイアウトで間違った何かを見つけることがわかりました。

属性android:layout_gravityは、レイアウトの重力を変更します。この属性をLinearLayoutに設定してcenterとし、android:layout_heightwrap_content(実際の高さが画面の高さを超えることを意味します)とし、ScrollView(高さが画面の高さ)を入力するとLinearLayoutは整列しますその親の中心にScrollView

あなたが中心の「のLinearLayout」の内容を保持したい場合は、ScrollViewandroid:fillViewport="true"を設定することができ、その後LinearLayoutは親を記入し、あなたがLinearLayoutandroid:gravity="center"を使用することができます。 Reference

しかし、まだ変更する必要があるものがあります。あなたのJavaコードではView view = new View(this)この行は新しいViewとなり、それをTableLayoutに追加します。しかし、このTableLayoutViewの記述のためにViewでいっぱいになります。 TextViewのような具体的なビューを使用することができます。

明確にしているかどうかわかりません。私はあなたがandroid:layout_gravityLinearLayoutの属性を削除すると、それが動作すると思います。

助けていただければうれしいです。

+0

それは役立ちますが、あなたは削除する場合は「中央」と内側のレイアウトその(なぜ私はそのプロパティを置くのですか)、上に構築するための素敵な答え、私は私のニーズに合わせて小さな適応を行いました(下記の回答を参照)。私が夢見ることができる最高のレイアウト;-)多くのありがとう! – Bamboomy

+0

私はちょうどこの質問を見て、あなたが見たいかもしれない何かを見つけました。 – Paul

0

アンドロイド:layout_gravity = "center"が削除されたときにinner LinearLayoutを中央に維持するために、Paulが提案した+ android:layout_heightを "wrap_content"に変更しました(下の完全なレイアウトを参照)。

私はポールの提案や説明がなければそれを見つけられなかったので、私は答えとして彼の答えを受け入れるでしょう、この答えは完全性のためだけです...

私は注意の多くを取得するには、この質問を期待していないよとにかく;-)

おかげでポール:-D

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_centerInParent="true" 
    android:layout_centerVertical="true" 
    android:background="#000" 
    android:gravity="center_horizontal|center_vertical" 
    android:orientation="vertical"> 

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal|center_vertical"> 

     <LinearLayout 
      android:id="@+id/linearLayout1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:orientation="vertical"> 

      <TextView 
       android:id="@+id/title" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:contentDescription="@string/play" 
       android:gravity="center_horizontal" 
       android:scaleType="centerInside" 
       android:text="@string/highScores" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:textColor="#fff" /> 

      <View 
       android:layout_width="1dp" 
       android:layout_height="20dp"></View> 

      <TableLayout 
       android:id="@+id/container" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center_vertical|center_horizontal"> 

      </TableLayout> 

     </LinearLayout> 

    </ScrollView> 

</LinearLayout> 
関連する問題