2010-10-30 42 views
31

Tôi có hai cột TableLayout là con duy nhất của chế độ xem cuộn. Cột đầu tiên chứa TextViews ('nhãn') và cột thứ hai chứa EditText/Spinner/DateWidget vv ('values'). Mặc dù tôi đã chỉ định android: layout_width = "fill_parent" cho TableLayout, TableRow & tất cả các tiện ích con (trong cột 'giá trị').Bảng chiều rộng của bảng Android

Màn hình trông hoàn hảo khi hoạt động được tạo. Tuy nhiên, khi một loại giá trị thực sự dài trong EditText, cột 'giá trị' sẽ vượt ra ngoài vùng màn hình hiển thị.

Làm cách nào để giải quyết vấn đề này?

Cảm ơn

Trả lời

57

Bạn có thể muốn xác định kích thước của các cột bằng cách sử dụng trọng số. Vì vậy, bạn sẽ xác định chiều cao bố trí bảng để điền vào cha mẹ nhưng đối với mỗi cột, bạn nên đặt chiều rộng thành "0px" và trọng số theo tỷ lệ phần trăm bạn muốn cột mở rộng. Giả sử bạn muốn cột đầu tiên chiếm 30% chiều rộng màn hình, bạn đặt trọng số là "0,3" và cột thứ hai là "0,7".

Hãy thử và xem điều đó có hiệu quả không.

+0

Đây là điều duy nhất cuối cùng đã làm cho tôi. Chỉ cần lưu ý rằng nếu bạn có shrinkColumns hoặc stretchColumns đặt trên TableLayout thì điều đó có thể có ảnh hưởng bất lợi đến mọi thứ. –

+0

Câu trả lời này không rõ ràng đối với tôi, ý bạn là đặt trọng số cho tất cả trẻ em thuộc tất cả các nhóm TableRow? Nếu vậy thì điểm của việc sử dụng TableLayout là gì?Tại sao không chỉ sử dụng LinearLayouts? Tôi đề nghị thiết lập cả hai căng và thu nhỏ trên cột đó là cho bạn gặp rắc rối. – satur9nine

0

Hãy thử điều này, hãy chắc chắn android:singleLine="false"android:inputType="textMultiLine":

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent" 
    android:stretchColumns="1"> 
    <TableRow android:layout_height="wrap_content" 
     android:layout_width="fill_parent"> 

     <TextView android:text="Label:" /> 
     <EditText android:id="@+id/entry" android:inputType="textMultiLine" 
      android:layout_width="wrap_content" android:layout_height="wrap_content" 
      android:singleLine="false" /> 
    </TableRow> 
</TableLayout> 
0

Tôi có vấn đề tương tự với EditText trên Android 2.2. Trong trường hợp của tôi, hãy thêm thuộc tính android: maxWidth = "0sp". Bây giờ EditText lĩnh vực được hiển thị như tôi muốn - vì vậy nó vẫn có kích thước tương tự như các lĩnh vực EditText khác, nhưng bổ sung nó không được thay đổi kích cỡ khi văn bản dài được nhập vào.

Dưới đây là định nghĩa EditText tôi:

<EditText android:id="@+id/extra_edit" 
     android:padding="3dip" 
     android:inputType="textImeMultiLine" 
     android:maxWidth="0sp" 
     android:layout_width="fill_parent" 
     /> 
+0

Gợi ý và giá trị trong EditText bị méo - tôi chỉ có thể thấy chữ cái đầu tiên. Bất kỳ công việc xung quanh? –

+0

Lưu ý mặc dù đây là cũ: nếu bạn đang sử dụng giá trị 0, hãy xem xét chỉ sử dụng 0px. sp có nghĩa là Android sẽ áp dụng giá trị mở rộng cho nó và 0 * mọi thứ = 0 –

7

này đã làm việc cho tôi ..

tableLayout.setColumnShrinkable(1,true); 
+1

Tuyệt vời! param đầu tiên là cột, và thứ hai để thiết lập nó co lại! Thanx! – Paschalis

5
<TableLayout 
android:layout_height="fill_parent" 
android:layout_width="fill_parent" 
android:layout_marginLeft="5dp" 
android:layout_marginRight="5dp"> 
<TableRow 
android:layout_height="fill_parent" 
android:layout_width="fill_parent"> 
<TextView 
android:layout_width="wrap_content" 
android:text="Name " 
android:layout_height="fill_parent"> 
</TextView> 
<EditText 
android:layout_width="0dp" 
android:layout_weight="1" 
android:hint="name" 
android:layout_height="wrap_content" 
> 
</EditText> 
</TableRow> 
</TableLayout> 

Mã này đã làm việc cho tôi để sắp xếp xem văn bản trên cột đầu tiên và chỉnh sửa văn bản điền mẹ .

+0

Cách tiếp cận này giúp ích rất nhiều khi các ô của bạn cần các kích thước khác nhau từ hàng này sang hàng khác – Diesel

20

Cách thực dụng để giải quyết vấn đề này là sử dụng các thuộc tính stretchColumnsshrinkColumns trong TableLayout. Giá trị của chúng phải là chỉ mục dựa trên 0 cột.

Ví dụ, nếu bạn có một bố trí bàn hai cột và:

  • Bạn muốn cột thứ hai để lấp đầy không gian trống (căng) để TableLayout phù hợp với quan điểm mẹ toàn bộ trên một màn hình lớn thiết bị
  • bạn muốn cột đầu tiên được thu nhỏ (và nội dung của nó có thể quấn/ellipsized) trên một thiết bị màn hình nhỏ

bạn sẽ xác định bạn TableLayout như:

<TableLayout 
    android:id="@+id/my_table_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:stretchColumns="1" 
    android:shrinkColumns="0" > 
</TableLayout> 
+2

Cũng lưu ý rằng bạn có thể kéo giãn và thu hẹp cột. Làm điều đó trên cột TextView của tôi ngăn không cho nó vượt quá kích thước màn hình nhưng cũng cho phép nó lấp đầy không gian có sẵn. – satur9nine

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