2

Например, я создаю 4 таблички программно, и я хочу, чтобы каждая высота табуляра составляла 1/4 размера экрана. Каждая высота табуляра равна половине размера экрана. Я пробовал разные способы, но высота таблицы не изменилась. Я управляю изменением ширины таблеток, но высота - нет. Вот мой код:Высота Tablerow не изменилась?

@SuppressLint("NewApi") 
public class GameActivity extends Activity { 

    private Context context; 

    public void drawTable(){ 
     int i; 
     TableLayout table = new TableLayout(context); 

     table.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.MATCH_PARENT)); 
     //table.setStretchAllColumns(true); 
     //table.setShrinkAllColumns(true); 
     //table.setWeightSum(1.0F); 
     TableRow[] rows = new TableRow[5]; 
     for(i = 0; i < 4; ++i){ 
      rows[i] = new TableRow(context); 
      rows[i].setBackgroundResource(R.drawable.images214); 
      rows[i].setWeightSum((float)1.0); 
      rows[i].setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, 10)); 
      //rows[i].setScaleY(0.25F); 
      table.addView(rows[i]); 
     } 

     LinearLayout l = (LinearLayout) findViewById(R.id.linear); 
     l.addView(table); 
    } 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_game); 

     context = this; 
//  TableLayout table = new TableLayout(this); 
//  TableRow row1 = new TableRow(this); 
//  TableRow row2 = new TableRow(this); 
//  row1.addView(new EditText(this)); 
//  row2.addView(new Button(this)); 
//  table.addView(row1); 
//  table.addView(row2); 
//  //table.setBackground(getResources().getDrawable(R.drawable.ic_launcher)); 
//  table.setBackgroundResource(R.drawable.ic_launcher); 
//  LinearLayout l = (LinearLayout) findViewById(R.id.linear); 
//  l.addView(table); 
     drawTable(); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_game, menu); 
     return true; 
    } 
} 

XML:

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

    <ScrollView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:scrollbars="none" 
    android:layout_weight="1"> 
     <LinearLayout 
     android:id="@+id/linear" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scrollbars="vertical|horizontal"> 
     </LinearLayout> 
</ScrollView> 
</RelativeLayout> 

ответ

6

Вы не используете правильный LayoutParams, для таблицыTableLayout вы должны установить LinearLayout.LayoutParams (при добавлении таблицы в LinearLayout) и для вашего TableRowsLayoutParams должен быть TableLayout.LayoutParams (поскольку они являются детьми TableLayout). Даже с вышеупомянутыми изменениями все не сработает, потому что TableLayout - это виджет, который накладывает ограничения на его детей, наиболее заметным будет высота, которая будет автоматически установлена ​​на WRAP_CONTENT для TableRows. Единственный способ изменить это использовать weight так:

TableLayout table = new TableLayout(context); 
table.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); 
table.setWeightSum(1.0f); 
TableRow[] rows = new TableRow[4]; 
for(int i = 0; i < 4; ++i){ 
    rows[i] = new TableRow(context); 
    rows[i].setBackgroundResource(R.drawable.images214); 
    rows[i].setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, 0, 0.25f));   
    table.addView(rows[i]); 
} 

LinearLayout l = (LinearLayout) findViewById(R.id.linear); 
l.addView(table); 

Но это не будет работать, потому что ваш TableLayout установлен для заполнения родителем, родителем, который является ScrollView, который не накладывает размеры на ее ребенка , Я не знаю, что вы пытаетесь сделать с этим ScrollView там (особенно, поскольку вы хотите, чтобы таблица заполнила весь экран), поэтому я не знаю, что вам рекомендовать. Кроме того, я не знаю ваш полный макет, но вы вложили много макетов.

+0

Большое спасибо, он работает. Мне не нужен Scrollview. Я просто добавил его в тестовые задачи, когда не вижу всех таблеток на экране. –

1

Для каждой строки таблицы набора высоты:

DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
int height = metrics.heightPixels/4; // quarter of screen height 
rows[i].setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, height)); 
+0

Спасибо, я попробую. –

+0

Это не помогает. Высота табло остается на половину размера экрана. Как вы можете видеть, я также пытался установить высоту 10, но она не меняется. –

Смежные вопросы