【问题标题】:Android add linearLayout to tableRow programmaticallyAndroid以编程方式将linearLayout添加到tableRow
【发布时间】:2011-07-04 05:11:23
【问题描述】:

我正在以编程方式填充 tableLayout。我希望我的行是这样的

<TableRow android:id="@+id/tableRow1"
                        android:layout_width="wrap_content" android:layout_height="wrap_content">
                        <ImageView android:src="@drawable/icon" android:id="@+id/imageView1"
                            android:layout_height="wrap_content" android:layout_width="wrap_content"></ImageView>
                        <LinearLayout android:id="@+id/linearLayout2"
                            android:layout_width="wrap_content" android:layout_height="wrap_content"
                            android:orientation="vertical">
                            <TextView android:id="@+id/textView2" android:text="TextView"
                                android:layout_height="wrap_content" android:layout_width="wrap_content"></TextView>
                            <TextView android:text="TextView" android:id="@+id/textView1"
                                android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
                        </LinearLayout>
                        <Button android:text="Button" android:id="@+id/button1"
                            android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
                    </TableRow>

我已经通过这样做的代码尝试过

TableRow row = new TableRow(activity);
      row.setGravity(Gravity.CENTER);
      row.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT,TableRow.LayoutParams.WRAP_CONTENT));


      image.setPadding(10, 10, 10, 10);       
      ((LinearLayout) image).setGravity(Gravity.LEFT);
      row.addView(image);

      LinearLayout main = new LinearLayout(row.getContext());
     main.setLayoutParams(new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT));
      main.setOrientation(LinearLayout.VERTICAL);


      TextView nameView = new TextView(activity);

      if(name.length() > 22)
          nameView.setText(name.substring(0, 22)+"...");
      else
          nameView.setText(name);

      nameView.setPadding(10, 10, 10, 10);
      nameView.setTextColor(Color.parseColor("#83be56"));
      nameView.setTypeface(null,Typeface.BOLD);
      nameView.setLayoutParams(new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT));

      main.addView(nameView,new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT));

      row.addView(main);

      bt.setText("Respond");
      bt.setPadding(10,10,10,10);
      bt.setGravity(Gravity.CENTER);

      row.addView(bt);

但是线性布局没有出现在行中。我哪里错了?? 谢谢

【问题讨论】:

  • 使用hierarchy-viewer查看发生了什么,请报告回来。
  • 你打电话给main.setLayoutParams(new LayoutParams(...,我会试试main.setLayoutParams(new TableRow.LayoutParams(...。

标签: android tablelayout tablerow


【解决方案1】:

您可以查看this SO answer,它解释了如何以编程方式创建TableRow,从部分XML 定义中扩展它。

编辑,在 cmets 之后:链接答案的要点是:

  • 创建一个代表表格行的部分布局,并带有自己的样式集:
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content"
  style="@style/tr_withborder" />
  • 通过代码动态膨胀部分:
TableRow tr = (TableRow) getLayoutInflater().inflate(R.layout.partial_table_row, null);

【讨论】:

    【解决方案2】:

    以下是我以编程方式将 TableRows 添加到表格布局的方法。每个 View 问题实际上是一个 XML 文件,独立于它所在的 Fragment。该 Fragment 有一个 Tablelayout,questionContainer,它接收每个新问题并将其添加到底部(questionContainer 位于滚动视图中):

    public class EconFragment extends SherlockFragment {
    
    private TableLayout questionContainer;
    int pos = 0;
    private String[] titles = {"The first title ", "hallo1","hallo2", "hallo3",
            "hallo4", "hallo5","hallo6", "hallo7","hallo8", "hallo9"};
    
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        Log.v("Econ", "onCreateView");
        View v = inflater.inflate(R.layout.econfragment, container, false);
        questionContainer = (TableLayout) v.findViewById(R.id.questionContainer);
        //bs
        int leftMargin=5;
        int topMargin=5;
        int rightMargin=5;
        int bottomMargin=5;
        while (pos < 10) {
        View question = inflater.inflate(R.layout.question, null);
        question.setId(pos);
        TextView title = (TextView) question.findViewById(R.id.questionTextView);
        title.setText(titles[pos]);
        Button charts = (Button) question.findViewById(R.id.chartsButton);
        charts.setId(pos);
        charts.setOnClickListener(chartsListener);
        TableRow tr = (TableRow) question;
        TableLayout.LayoutParams trParams = new TableLayout.LayoutParams(
                TableLayout.LayoutParams.MATCH_PARENT,
                TableLayout.LayoutParams.WRAP_CONTENT);
        trParams.setMargins(leftMargin, topMargin, rightMargin, bottomMargin);
        tr.setLayoutParams(trParams);
        Log.v("econ", "while loop");
        questionContainer.addView(tr);
        pos++;
        }
        pos = 0;
        return v;
    }
    

    【讨论】:

      【解决方案3】:
      I would do something like this if I know the how many layouts i need to add.
      
          TableRow tableRow ;
      
          tableRow = findViewById(R.id.tableRow1);
      
          //Adding 2 LinearLayout 
          for (int i = 1; i <= 2; i++) {
              LinearLayout linearLayout= new LinearLayout (this);
              tableRow.addView(linearLayout);
          } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多