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?
Trả lời
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.).
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 **. –
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? –
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
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).
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! –
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>
đượ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. –
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) + "";
}
}
});
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));
}
}
//...
}
};
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
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 –
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
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
vui lòng xem câu trả lời đã chỉnh sửa tại đây: http: //stackoverflow.com/a/7022137/2469134 –