2012-04-02 40 views
12

Tôi có một TableLayout nơi tôi thêm TableRows động. Trong mỗi TableRow, tôi thêm một Button.Thêm khoảng cách giữa các cột trong TableLayout

Tôi chỉ muốn thêm một số khoảng trống giữa các cột (là các nút của tôi) nhưng tôi không thể tìm ra cách ... Tôi đã cố thay đổi tất cả các lề có thể nhưng không hoạt động: ( Vì vậy, có lẽ tôi đã phạm sai lầm trong mã của tôi, nơi tôi thổi phồng chúng từ file XML:

private void createButtons(final CategoryBean parentCategory) { 
    final List<CategoryBean> categoryList = parentCategory.getCategoryList(); 
    title.setText(parentCategory.getTitle()); 
    // TODO à revoir 
    int i = 0; 
    TableRow tr = null; 
    Set<TableRow> trList = new LinkedHashSet<TableRow>(); 
    for (final CategoryBean category : categoryList) { 

     TextView button = (TextView) inflater.inflate(R.layout.button_table_row_category, null); 
     button.setText(category.getTitle()); 
     if (i % 2 == 0) { 
      tr = (TableRow) inflater.inflate(R.layout.table_row_category, null); 
      tr.addView(button); 
     } else { 
      tr.addView(button); 
     } 

     trList.add(tr); 

     button.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       CategoryBean firstChild = category.getCategoryList() != null && !category.getCategoryList().isEmpty() ? category 
         .getCategoryList().get(0) : null; 
       if (firstChild != null && firstChild instanceof QuestionsBean) { 
        Intent intent = new Intent(CategoryActivity.this, QuestionsActivity.class); 
        intent.putExtra(MainActivity.CATEGORY, category); 
        startActivityForResult(intent, VisiteActivity.QUESTION_LIST_RETURN_CODE); 
       } else { 
        Intent intent = new Intent(CategoryActivity.this, CategoryActivity.class); 
        intent.putExtra(MainActivity.CATEGORY, category); 
        startActivityForResult(intent, VisiteActivity.CATEGORY_RETURN_CODE); 
       } 
      } 
     }); 
     i++; 
    } 
    for (TableRow tableRow : trList) { 
     categoryLaout.addView(tableRow); 
    } 
} 

button_table_row_category.xml của tôi:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/buttonTableRowCategory" 
    style="@style/ButtonsTableRowCategory" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:text="@string/validate" /> 

table_row_category.xml của tôi:

<?xml version="1.0" encoding="utf-8"?> 
<TableRow xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/tableRowCategory" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_margin="100dp" 
    android:gravity="center" 
    android:padding="5dp" > 

</TableRow> 

Cảm ơn sự giúp đỡ của bạn.

+0

thực sự có nghĩa là bạn muốn thêm khoảng cách giữa các hàng (không phải cột?) – manmal

+0

Bạn có muốn không gian ở giữa nút và tên cột hay không? Không nhận được ý tưởng chính xác .. – Dhruvisha

+0

@manmal Tôi có một cột mới cho mỗi nút. Tôi muốn thêm khoảng cách giữa các cột. Giữa các hàng là ok. – Nico

Trả lời

13

Trong trường hợp của TableLayout, các nút là các cột. Điều đó có nghĩa là bạn phải tư vấn cho các nút để giữ một số khoảng trống không gian. Bạn có thể làm điều này bằng cách sử dụng các tham số layout. Chúng dễ dàng hơn nhiều trong XML, nhưng nó cũng hoạt động theo chương trình. Điều quan trọng là bạn luôn sử dụng lớp LayoutParam bố trí mẹ của phần tử mà bạn áp dụng nó - trong trường hợp này, phụ huynh là một TableRow:

// Within createButtons(): 
android.widget.TableRow.LayoutParams p = new android.widget.TableRow.LayoutParams(); 
p.rightMargin = DisplayHelper.dpToPixel(10, getContext()); // right-margin = 10dp 
button.setLayoutParams(p); 

// DisplayHelper: 
private static Float scale; 
public static int dpToPixel(int dp, Context context) { 
    if (scale == null) 
     scale = context.getResources().getDisplayMetrics().density; 
    return (int) ((float) dp * scale); 
} 

Hầu hết các khía cạnh thuộc tính trong Android mất pixel nếu bạn cài đặt chúng lập trình - do đó bạn nên sử dụng một cái gì đó giống như phương thức dpToPixel() của tôi. Xin vui lòng, không bao giờ sử dụng giá trị pixel trong Android! Bạn sẽ hối tiếc sau này.

Nếu bạn không muốn nút ngoài cùng bên phải có lề này, chỉ cần kiểm tra bằng IF và không thêm LayoutParam vào đó.


Giải pháp trong XML:

Để tránh LayoutInflater xóa thuộc tính XML xác định của bạn, làm điều này trong khi lạm phát (lấy từ Layout params of loaded view are ignored):

View view = inflater.inflate(R.layout.item /* resource id */, 
            MyView.this /* parent */, 
            false /*attachToRoot*/); 

Alternative: Sử dụng GridView như sau: Android: Simple GridView that displays text in the grids

+0

Cảm ơn Manmal nó hoạt động nhưng tôi hoàn toàn không hiểu! Khi tôi cố gắng đặt android: layout_marginRight = "10dp" hoặc android: layout_margin = "10dp" trong button_table_row_category.xml của tôi, nó không hoạt động. Làm thế nào tôi có thể làm điều đó trong XML? Cảm ơn một lần nữa! – Nico

+0

câu trả lời được cập nhật với giải pháp XML :) – manmal

+0

Tôi thực sự không có một lớp đại diện cho bố cục của tôi như MyView làm cho vấn đề trên liên kết của bạn. Tôi chỉ sử dụng XML, trong trường hợp đó, làm thế nào tôi có thể làm điều đó. Tôi cũng ngạc nhiên, LayoutInflater xóa các thuộc tính được định nghĩa XML của tôi? Lý do tại sao mà ? Vậy thì, điểm nào để thổi phồng một XML? – Nico

8

Thêm Padding phải cho một thành phần trong thành phần bảng hàng

<TableRow 
    android:id="@+id/tableRow1"> 

    <TextView 
     android:id="@+id/textView1" 
     android:paddingRight="20dp" /> 

</TableRow> 
+0

Mặc dù người hỏi đã hỏi cách thêm khoảng cách theo chương trình, điều này đã giúp tôi tìm kiếm để giải quyết vấn đề trong XML. –

0

Hãy thử Sử dụng setColumnStretchable chức năng của TableLayout. Cung cấp cho nó một chỉ mục columnn và đặt thuộc tính có thể kéo dài của nó thành true.

Ví dụ: Nếu bạn có 3 cột.

TableLayout tblLayout; 
tblLayout.setColumnStretchable(0, true); 
tblLayout.setColumnStretchable(1, true); 
tblLayout.setColumnStretchable(2, true); 

Ở trên sẽ cho bạn khoảng cách bằng nhau giữa cả 3 cột của tableLayout.

1

Hãy thử android:layout_marginRight="6dp" tính năng này có hiệu quả đối với tôi.

Các vấn đề liên quan