2011-02-10 27 views
5

Tôi đang cố gắng để có được một hàng chữ sẽ được cái gì đó nhưbố trí sử dụng Android layout_weight, layout_width và maxWidth

foofoofoo - barbarbar

nhưng tôi muốn nó elip foo và bar nếu nó đã giành' t phù hợp trên một dòng. tức là tôi đang cố gắng rút ngắn chúng xuống.

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <TextView android:id="@+id/text_1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:adjustViewBounds="true" 
     android:maxWidth="0dip" 
     android:layout_weight="1" 
     android:textColor="#ffffff" 
     android:singleLine="true" 
     android:ellipsize="true" 
     android:text="foofoofoofoo" /> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="#ffffff" 
     android:text=" - " /> 
    <TextView 
     android:id="@+id/text_2" 
     android:layout_width="wrap_content"       
     android:layout_height="wrap_content" 
     android:maxWidth="0dip" 
     android:layout_weight="1" 
     android:textColor="#ffffff" 
     android:singleLine="true" 
     android:ellipsize="true" 
     android:text="barbarbarbar" /> 
</LinearLayout> 

Hãy để tôi làm việc này một phần.

Thiết lập 's layout_widthTextView0diplayout_weight1 nghĩa là họ sẽ mất 50% của không gian có sẵn mỗi.

Thiết lập singleLine để trueellipsize để true nghĩa là họ sẽ trông giống như foofoo ... nếu văn bản lớn hơn thùng sơn.

Do đó kết quả của tôi (nếu văn bản dài) nên

foofoo .. - Barbar ..

Mà nó là! Vì vậy, điều này hoạt động.

Bây giờ trường hợp tôi đang cố gắng để sửa chữa là, nếu là người đầu tiên TextView (id: bản_1) có văn bản đó là ít hơn 50% do layout_width="0dip"layout_weight="1" Tôi muốn nó wrap_content. Nếu không nó trông giống như:

fookhông gian trống- Barbar ..

và tôi muốn

foo - barbarbar

Đây là lý do tại sao tôi đã thay đổi layout_width="wrap_content" và thêm android:maxWidth="0dip" nhưng điều này không hoạt động! Dường như bỏ qua tôi nói rằng wrap_content và vẫn cho chế độ xem này 50%!

Tôi đọc rằng bạn cần thêm android:adjustViewBounds="true" cho maxWidth để hoạt động nhưng điều này không ảnh hưởng.

Trả lời

10

Đây là cách tốt nhất tôi có thể làm, hãy thử thay đổi các chuỗi để xem nó có hoạt động như dự định hay không.

<?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:shrinkColumns="0,2" 
    android:stretchColumns="0,2"> 
    <TableRow> 
     <TextView android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:ellipsize="end" 
      android:text="foofoofoo"/> 
     <TextView android:id="@+id/textView3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="-" 
      android:gravity="center_horizontal"/> 
     <TextView android:id="@+id/textView2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:ellipsize="end" 
      android:text="barbarbarbarbarbarbarbarbarbarbarbar"/> 
    </TableRow> 
</TableLayout> 
+2

Xóa android: stretchColumns = " 0,2 ", và nó hoạt động. Cho đến nay anyway! :-) cảm ơn – Blundell

+1

@Blundell wow, tôi là một thợ săn tiền thưởng! vui vì nó đã làm việc và cảm ơn bạn vì giải thưởng. – bigstones

+2

Giúp cả hai chúng tôi. Tôi là một ân nhân :-D – Blundell

2

Thật khó để nói chính xác những gì bạn muốn, nhưng tôi tin câu trả lời là bạn không thể làm điều này trừ khi bạn điều chỉnh động bố cục của mình bằng mã. Lý do cho điều này là bởi vì bạn đang yêu cầu hệ thống làm việc theo nhiều cách khác nhau.

Trước tiên, bạn muốn lượt xem chia sẻ không gian bằng nhau khi lượng văn bản trong chế độ xem giống nhau.

Thứ hai, bạn muốn các chế độ xem là KHÔNG chia sẻ không gian như nhau khi có ít văn bản ở chế độ xem khác.

Có nhiều trường hợp khác ở đây có thể được xử lý theo bất kỳ cách nào bạn muốn. Những gì tôi đang cố gắng để truyền đạt tuy nhiên, là yêu cầu của bạn cùng một bố trí để xử lý mọi thứ theo những cách khác nhau đó là lý do tại sao bạn không thể đạt được điều này với một bố cục duy nhất.

+0

Tôi muốn cơ bản nói maxWidth là chia sẻ không gian (do đó bỏ qua), nhưng thông thường chỉ wrap_content. Vì vậy, tôi sẽ giả sử nó sẽ wrap_content trừ khi giá trị nhúng wrap_content> 50% sau đó nó sẽ sử dụng maxWidth (đó là 50%), không? – Blundell

+0

'trừ khi giá trị nhúng của wrap_content> 50% sau đó nó sẽ sử dụng maxWidth' ... Tôi thực sự không chắc chắn những gì bạn đang cố gắng để nói. 'wrap_content' không sử dụng giá trị nhúng. – user432209

+0

Có nhưng không, nhưng maxWidth phải tương tác với layout_width theo một cách nào đó. Vì vậy, tôi có nghĩa là trong nền nó phải tính toán chiều rộng của bố trí và nếu nó là> maxWidth maxWidth sử dụng. Vì vậy, tôi là sayin wrap_content, nhưng nếu (trong nền) wrap_content là> 50% sử dụng maxWidth. Đây không phải là cách nó hoạt động? – Blundell

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