2010-11-02 23 views
16

Khi yêu cầu dự án của tôi, tôi phải làm nổi bật hàng trên bảng onClick. Có cách nào để làm điều này? Hoặc đề nghị tôi thay thế?Tôi làm cách nào để làm nổi bật hàng của bảng khi nhấp?

+1

Một chút trễ nhưng hãy kiểm tra câu trả lời của chuỗi này: http://stackoverflow.com/questions/6274343/how-to-change-the-background-color-of-a-tablerow-when-focused – Arnaud

+0

Bạn có thể tham khảo [liên kết này] (http://stackoverflow.com/questions/4410420/onclick-change-tablerow-background-color) tham khảo câu trả lời được đưa ra bởi Josh Clemm. – prateek

+0

vui lòng xem câu trả lời đã chỉnh sửa tại đây: http: //stackoverflow.com/a/7022137/2469134 –

Trả lời

24

Nếu bạn muốn sử dụng các chứng khoán trên nhấp chuột nổi bật như bạn nhận được với một ListView chung chung, bạn muốn thiết lập nền tảng của mỗi hàng là android:background="@android:drawable/list_selector_background"

Dưới đây là một ví dụ:

<TableLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:stretchColumns="0"> 
    <TableRow 
    android:id="@+id/first_row" 
    android:background="@android:drawable/list_selector_background" > 
    ... row content ... 
    </TableRow> 
</TableLayout> 

sau đó, trong mã,

TableRow firstRow = (TableRow) findViewById(R.id.first_row); 
firstRow.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO: do your logic here 

     } 
} 

Và bạn sẽ nhận được một hàng nổi bật-thể giống như trong một ListView ...

EDIT: Ở trên sẽ cung cấp cho bạn bộ chọn nền danh sách của chủ đề mặc định. Nếu bạn muốn bộ chọn chung hơn (như bộ chọn thiết kế material design khi người dùng chạm vào một hàng), hãy sử dụng:

android:background="?android:attr/selectableItemBackground" 

Điều này cũng áp dụng cho nhiều hơn chỉ TableRows. Bạn sẽ có thể thực hiện điều này trên hầu như bất kỳ tiện ích chung nào có gắn onClickListener (TextViews, Buttons, v.v.).

+0

Bạn rõ ràng chưa thử nghiệm điều này. Tất cả điều này là đặt màu nền của hàng trong bảng và thêm trình nghe nhấp vào hàng, ** không có gì khác **. –

+6

Tôi đã thử nghiệm nó - và nó đang được sử dụng trong sản xuất khá thành công. Bạn nói đúng là nó thiết lập nền. Những gì nó đặt nó là chìa khóa - '@android: drawable/list_selector_background' là tiêu điểm của chủ đề của điện thoại khi bạn nhấp vào một mục trong một ListView. Thật kỳ lạ, trước khi bỏ một bình luận, bạn đã thử nó chưa? –

+0

Tôi đã thử nghiệm nó và nó hoạt động. Đó là chính xác những gì tôi đang tìm kiếm: hành vi nút cho một TableRow. – Lekensteyn

9

Trong OnClickListener add:

tr1.setBackgroundResource(drawable.list_selector_background); 

đâu TR1 là tablerow của bạn. (bạn sẽ cần phải làm cho tablerow cuối cùng cho nó hoạt động).

+0

cảm ơn nhưng khi tôi nhấn hàng, nó được đánh dấu và sau đó trở lại một lần nữa để được bỏ đánh dấu! –

11

Thậm chí tôi đã phải đối mặt với cùng một vấn đề với sự giúp đỡ của câu trả lời Salil học giả làm một sự thay đổi chút cho nó và làm việc cho tôi

Đây là TableRow trong xml:

<TableRow 
     android:id="@+id/tableRow1" 
     android:layout_width="wrap_content" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:padding="5dip" 
     android:background="@drawable/selector"> 

Đây là selector.xml trong res\drawable thư mục

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_focused="true" 
      android:state_pressed="true" 
      android:drawable="@android:drawable/list_selector_background"></item> 
    <item android:state_focused="true" 
      android:state_pressed="false" 
      android:drawable="@android:drawable/list_selector_background"></item> 
    <item 
      android:state_focused="false" 
      android:state_pressed="true" 
      android:drawable="@android:drawable/list_selector_background" /> 


    <item android:drawable="@android:drawable/list_selector_background"></item> 

</selector> 
+0

được quản lý để theo dõi, nhưng hãy nhớ trong khi tạo bộ chọn trong thư mục có thể kéo, hãy tạo selector.xml làm tài nguyên có thể kéo. –

0
String _row_selected = null; 
boolean _is_selection_even = false; 
private TableLayout TL; 
TableRow row_data = new TableRow(this); 

row_data.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if (_row_selected != null) { 

        if (Integer.parseInt(_row_selected) == TL.indexOfChild(v)) { 

         if (_is_selection_even) { 
          TL.getChildAt(Integer.parseInt(_row_selected)).setBackgroundColor(0xFF00FF00); 
          _is_selection_even = false; 
         } else { 
          TL.getChildAt(Integer.parseInt(_row_selected)).setBackgroundColor(Color.WHITE); 
          _is_selection_even = true; 
         } 


        } else { 
         TL.getChildAt(Integer.parseInt(_row_selected)).setBackgroundColor(Color.WHITE); 
         v.setBackgroundColor(0xFF00FF00); 
         _row_selected = null; 
         _row_selected = TL.indexOfChild(v) + ""; 
        } 

       } else { 
        v.setBackgroundColor(0xFF00FF00); 
        _row_selected = null; 
        _row_selected = summaryTL.indexOfChild(v) + ""; 
       } 
       } 
     }); 
1
private OnClickListener tablerowOnClickListener = new OnClickListener() 
{ 
    public void onClick(View v) 
    { 
     //Highlight selected row 
     //Highlight selected row 
     for (int i = 1; i < tblItemDetail.getChildCount(); i++) 
     { 
      View row = tblItemDetail.getChildAt(i); 
      if (row == v) 
      { 
       row.setBackgroundColor(getResources().getColor(android.R.color.holo_red_light));    
      } 
      else 
      { 
       //Change this to your normal background color. 
       row.setBackgroundColor(getResources().getColor(android.R.color.transparent)); 
      } 
     } 
     //... 
    } 
}; 
+0

hoạt động của nó. bảng bố trí của người nghe onclick hàng và đặt mã này trong đó. – bhruguni

+0

Cảm ơn rất nhiều, nó đã giải quyết được vấn đề của tôi ..... bạn đã cứu tôi hôm nay –

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