Android: tắt tính năng tô sáng trên listView bấm


302

Tôi muốn tắt tính năng tô sáng màu cam xảy ra khi chạm vào một hàng listView. Cho đến nay trong xml của tôi, tôi đã thử như sau:

android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"

Thông tin thêm: Tôi muốn có sự khác biệt bằng không khi người dùng chạm vào màn hình trên đối tượng listView này.

Câu trả lời:


674

Thêm phần này vào xml của bạn:

android:listSelector="@android:color/transparent"

Và đối với vấn đề này có thể hoạt động (Tôi không chắc và tôi không biết có giải pháp nào tốt hơn không):

Bạn có thể áp dụng ColorStateList cho TextView của mình.


2
nếu trong suốt vẫn làm tối lựa chọn một chút, có lẽ nó không được định nghĩa là hoàn toàn trong suốt. Thay vào đó hãy thử # 00000000, điều này hoàn toàn vô hình.
Rực rỡ

Giải pháp hoàn hảo cho tôi. Tôi đã thử thiết lập một bộ chọn XML trong suốt có thể vẽ được cho nền của các bản liệt kê xung quanh bố cục nhưng điều này dẫn đến thanh màu cam đã nói ở trên trên các thiết bị ICS.
Markus Rudel

@RoflcoptrException Tôi sử dụng một Fragmentdanh sách. Bố cục XML chứa một LinearLayoutvà nhiều TextViewmục. Tôi nên tắt tính năng đánh dấu hàng ở đâu?
JJD

40
Từ Mã Java, bạn có thể làmlistView.setSelector(android.R.color.transparent);
sulai

@RoflcoptrException -> "Bạn có thể áp dụng ColorStateList cho TextView của mình" - đây là một tùy chọn tốt, nếu các hàng danh sách không thể nhấp được. Ngay khi có thể nhấp vào chế độ xem văn bản, sự kiện onClick của danh sách sẽ không kích hoạt.
Sebastian Hojas

189

Câu trả lời của RoflcoptrException nên thực hiện mẹo, nhưng vì một số lý do nó không hiệu quả với tôi, vì vậy tôi đang đăng giải pháp hiệu quả cho tôi, hy vọng nó sẽ giúp được ai đó

<ListView 
android:listSelector="@android:color/transparent" 
android:cacheColorHint="@android:color/transparent"
/>

101

Hiệu ứng nổi bật màu cam là một phong cách trên ListView. Bài viết này cung cấp một cái nhìn tổng quan tốt về cách ghi đè kiểu listView.

Về cơ bản, bạn có một bộ chọn chỉ định các thành phần kiểu khác nhau dựa trên trạng thái hiện tại.

xem phần này để biết giải pháp ngắn và nhanh https://stackoverflow.com/a/12242564/185022


Phương thức này có cho phép tôi có một kiểu khác nhau cho từng đối tượng listView không? Ngoài ra, có thể tránh được vấn đề tôi đưa ra trong câu trả lời của Sebi không?
John Moffitt

1
Có, bạn có thể ghi đè bất kỳ thuộc tính phong cách. Bạn có thể chỉ định một kiểu cụ thể cho từng ListView bằng cách sử dụng thuộc tính style = "@ style / MyStyle" như được mô tả trong liên kết đầu tiên.
Cheryl Simon

Tôi xin lỗi nhưng đây không phải là câu trả lời. Thay đổi listSelectornên được nó.
Ayman Salah

63

Từ ListView: Vô hiệu hóa Tiêu điểm nổi bật ,

khi bạn thiết lập ListAdaptersử dụng mã sau đây

ListAdapter adapter = new SimpleCursorAdapter(MyList, Layout, c, 
                new String[] { "Name", "Score" }, to) 
{ 
    public boolean areAllItemsEnabled() 
    { 
        return false; 
    } 
    public boolean isEnabled(int position) 
    { 
        return false; 
    } 
}; 

Điều này sẽ ghi đè lên BaseAdapterlớp. Nó cũng hủy bỏ đường viền trắng giữa các ô.


4
Không hợp lệ, điều đó đã vô hiệu hóa hành vi lựa chọn (OnItemClicky sẽ không kích hoạt) cho mục này
Sandor

6
Đây là một giải pháp tốt bởi vì liệu một mục listview được làm nổi bật có phải là một vấn đề hành vi hơn là một vấn đề thẩm mỹ. Vì vậy, bạn có thể sử dụng điều này cho các danh sách mà bạn không muốn có tài sản có thể lựa chọn. Một phong cách toàn cầu không thực sự có ý nghĩa, vì bạn biết rằng cuối cùng bạn sẽ muốn có một listview có thể được chọn, và sử dụng các phong cách cho hành vi đối với tôi có vẻ sai. Chúng không nên có ý nghĩa ngữ nghĩa, chỉ có tính thẩm mỹ. Các thuộc tính của sự lựa chọn là một điều ngữ nghĩa.
Thomas Dignan

Ngoài ra, đây không phải là câu trả lời cho câu hỏi này, ghi đè isEnabledđể vô hiệu hóa một mục không phải là cách để vô hiệu hóa nó! Tài liệu nói rằng isEnabledcần phải xác định xem một mục có phải là dấu phân cách hay không.
Bakhshi

39

thêm điều này vào url cùng với listselector..hãy nó sẽ hoạt động

<ListView
android:cacheColorHint="@android:color/transparent"
android:listSelector="@android:color/transparent"/> 

2
Cảm ơn nhiều. Tôi muốn giải quyết vấn đề là toàn bộ listView bị hightlight (màu trắng trong trường hợp của tôi) khi cuộn (Chỉ xảy ra trước Android 2.3). Và nó hoạt động.
Yeung

"# 00000000" và "@android: màu / trong suốt" cho loại đa dạng?
Androider

@Androider ya trong năm 2011 tôi đã để cho mọi người biết nó hoạt động cả hai cách ... Chắc chắn hôm nay bạn wont cần # 000000
Sheetal

32

Nếu bạn đang sử dụng ArrayAdapterhoặc BaseAdapterđể điền vào danh sách các mục. Overridecác isEnabledphương pháp và lợi nhuận false.

 @Override
  public boolean isEnabled (int position) {
    return false;
  }

13

Sau một vài 'google và thử nghiệm trên các thiết bị ảo và thực, tôi nhận thấy đoạn mã dưới đây của tôi hoạt động:

ArrayAdapter<String> myList = new ArrayAdapter<String>(this, R.layout.list_item, strText) {
    public boolean isEnabled(int position) 
    { 
            return false; 
    } 
};

lưu ý rằng tôi đã bỏ qua areAllItemsEnabled()phần này.


Điều này làm việc cho tôi. tuy nhiên, điều đó không có nghĩa là nếu có một drawable cho các hàng có trạng thái bị vô hiệu hóa, nó cũng sẽ thay đổi hình ảnh của chúng? Có thể vô hiệu hóa nhấp và không thay đổi drawable?
nhà phát triển Android

1
Điều này có tác dụng phụ khiến ListView không hiển thị các vạch chia.
Maciej Pigulski

11

Không có gì giúp tôi nhưng điều này:

transparent_drawable.xml:

<?xml version="1.0" encoding="utf-8"?>    
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#00000000"/>
</shape>

layout.xml:

android:listSelector="@drawable/transparent_drawable"

7

trong mã

listView.setSelector(getResources().getDrawable(R.drawable.transparent));

và thêm hình ảnh nhỏ trong suốt vào thư mục drawable.

Giống như: trong suốt

<?xml version="1.0" encoding="utf-8"?>    
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#00000000"/>
</shape>

5

Đối với tôi android:focusableInTouchMode="true"là con đường để đi. android:listSelector="@android:color/transparent" là không sử dụng. Lưu ý rằng tôi đang sử dụng một listview tùy chỉnh với một số đối tượng trong mỗi hàng.


5

Bạn chỉ cần thêm: android:cacheColorHint="@android:color/transparent"


5

Như một sự thay thế:

listView.setSelector(android.R.color.transparent);

hoặc là

listView.setSelector(new StateListDrawable());

1

Có một cách nhanh chóng và dễ dàng để làm điều này: Trong phương pháp:

private void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
{
    //TODO
    ((ListView)sender).SelectedItem = null;
}

Hy vọng nó sẽ giúp;)


C # này không phải java
Anthony

Tôi nghĩ rằng hầu hết các lập trình viên Android vẫn đang sử dụng java vì đó là những gì Android Studio hỗ trợ, nhưng C # có thể được sử dụng. Tôi chỉ muốn làm rõ rằng đây là C #: D
Anthony

0

Nếu bạn muốn tắt tính năng tô sáng cho một mục xem danh sách, nhưng vẫn giữ ô được bật, hãy đặt màu nền cho ô đó để tắt tính năng tô sáng.

Ví dụ, trong bố trí ô của bạn, hãy đặt android:background="@color/white"


0

bạn chỉ có thể nhận được những posgì bạn nhận được từ onItemClick và làm:

listView.setItemChecked(pos, false);

đó là cách tốt nhất mà tôi biết

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.