2012-01-31 3 views
4

전체 화면을 채우기 위해 셀과 행이있는 테이블 레이아웃을 채우려고합니다. 이처럼 :android : layout_weight가있는 TableLayout에 프로그래밍 방식으로 채우기

http://imageshack.us/photo/my-images/69/device20120201005942.png/

Eclipse에서 그래픽 레이아웃 창에서 디자인이 레이아웃은 내가 원하는 것을 제공 (안드로이드 : layout_weight를 스트레칭 수직 해결) :

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center" 
    android:stretchColumns="*" > 

    <TableRow 
     android:id="@+id/tableRow1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" android:layout_weight="1"> 

     <ImageView 
      android:id="@+id/imageView1" 
      android:layout_gravity="center" 
      android:src="@drawable/add" /> 
     <ImageView 
      android:id="@+id/imageView2" 
      android:layout_gravity="center" 
      android:src="@drawable/bound" /> 
     <ImageView 
      android:id="@+id/imageView3" 
      android:layout_gravity="center" 
      android:src="@drawable/cod" /> 
    </TableRow> 

    <TableRow 
     android:id="@+id/tableRow2" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" > 

    <ImageView 
     android:id="@+id/imageView4" 
     android:layout_gravity="center" 
     android:src="@drawable/delete" /> 
    <ImageView 
     android:id="@+id/imageView5" 
     android:layout_gravity="center" 
     android:src="@drawable/delete2" /> 
    <ImageView 
     android:id="@+id/imageView6" 
     android:layout_gravity="center" 
     android:src="@drawable/floppy" /> 
    </TableRow> 
</TableLayout> 

나는 내에서 동일한 모양을 만들려고하고 있어요 코드하지만 지금까지 실패했습니다. 여기 내 활동의 한 OnCreate입니다 :

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

    TableLayout tl = (TableLayout) findViewById(R.id.table); 
    Log.d(TAG, "Width :" + tl.getWidth()); 
    for (int row = 0; row < 3; row++) { 
     TableRow tr = new TableRow(this); 
     tr.setId(100 + row); 

     for (int cell = 0; cell < 3; cell++) { 
      ImageView image = new ImageView(this); 
      image.setImageResource(imageIDs[row * 3 + cell]); 
      tr.addView(image); 
     } 

     tr.setGravity(Gravity.CENTER); 
     LayoutParams params = new TableRow.LayoutParams(
       LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1); 

     tr.setLayoutParams(params); 

     tl.addView(tr, params); 
    } 
    tl.setStretchAllColumns(true); 
} 

나는 이미지 뷰 중력을 설정하는 코드를 놓치고는 있지만,이 시도는 충돌 원인 :

image.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER)); 

이 코드는 3 개 행이 만든 결과, 각 스트레칭이 아닌 수평으로 만 수직 :

http://imageshack.us/photo/my-images/835/gridc.png/

내가 여기 실종 찾을 수 없습니다. 또한 디자이너에서 tablerow를 준비하고 런타임 중에 테이블에 추가하고 팽창하려했지만 결과는 변경되지 않았습니다.

그래서 어떻게 든 편집기로 만들 수있는 레이아웃과 프로그래밍 방식으로 같은 레이아웃을 만들고 싶습니다.

도움말, 제발!

+0

위 레이아웃을 위의 3 개의 레이아웃 xml (테이블 하나, 행 하나, 이미지 뷰 하나)로 나누고 런타임 중에 설정하여 일부 속성이 누락되었는지 확인하려고했습니다. 그러나 여전히 같은 문제. – volkan

답변

5

나는 1 시간 반 동안 무슨 일이 있었는지 알아 내려고 노력했습니다.

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/table" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
</TableLayout> 
:

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Gravity; 
import android.widget.*; 
import android.widget.TableLayout; 
import android.widget.TableRow; 

public class TableActivity extends Activity { 

    private static final String TAG="TableActivity"; 

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

     TableLayout tl = (TableLayout) findViewById(R.id.table); 
     Log.d(TAG, "Width :" + tl.getWidth()); 

     for (int row = 0; row < 3; row++) { 
      TableRow tr = new TableRow(this); 
      tr.setId(100 + row); 

      //Note that you must use TableLayout.LayoutParams, 
      //since the parent of this TableRow is a TableLayout 
      TableLayout.LayoutParams params = new TableLayout.LayoutParams(
        TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT, 1f); 

      for (int cell = 0; cell < 3; cell++) { 
       ImageView image = new ImageView(this); 
       image.setImageResource(android.R.drawable.btn_plus); 
       //Note that here you must use TableRow.LayoutParams 
       //since TableRow is the parent of this ImageView 
       TableRow.LayoutParams imageParams = new TableRow.LayoutParams(); 

       //And this is how you set the gravity: 
       imageParams.gravity = Gravity.CENTER; 
       image.setLayoutParams(imageParams); 
       tr.addView(image); 
      } 
      tr.setLayoutParams(params); 
      tl.addView(tr, params); 
     } 
     tl.setStretchAllColumns(true); 
    } 
} 

table_activity.xml 그냥 빈 테이블 레이아웃입니다 : 그리고 나는, 테이블 행과 이미지에 대해 서로 다른의 LayoutParams의 사용을 유의하시기 바랍니다 여기에 :) 내 TableActivity의 전체 목록의 발견

간단히 말하면, 가장 간단한 해결책은 xml 파일에 정의 된 레이아웃을 사용하는 것입니다. 그러나 JAVA를 사용해야하는 경우 사용중인 LayoutParams의 왕과 조심해야합니다. 뷰의 부모.

관련 문제