Android : listView 클릭시 하이라이트 비활성화


302

listView 행을 터치 할 때 발생하는 주황색 하이라이트를 비활성화하고 싶습니다. 지금까지 내 XML에서 다음을 시도했습니다.

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

추가 정보 : 사용자 가이 listView 객체의 화면을 터치 할 때 차이가 없도록하고 싶습니다.

답변:


674

이것을 XML에 추가하십시오.

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

그리고 문제의 경우 이것이 효과가있을 수 있습니다 (확실하지 않으며 더 나은 해결책이 있는지 모르겠습니다).

TextState에 ColorStateList 를 적용 할 수 있습니다 .


2
투명도가 여전히 선택 영역을 약간 어둡게하는 경우 완전히 투명하게 정의되지 않은 것일 수 있습니다. 대신 # 00000000을 시도하십시오. 이것은 완전히 보이지 않습니다.
Ridcully

나를위한 완벽한 솔루션. 레이아웃을 둘러싼 목록보기의 배경에 대해 투명 선택기 XML 드로어 블을 설정하려고 시도했지만 ICS 장치에서 주황색 막대가 나타납니다.
Markus Rudel

@RoflcoptrException Fragment목록에 a 를 사용 합니다. XML 레이아웃에는 LinearLayout여러 TextView항목이 포함 됩니다. 행 강조 표시를 어디서 비활성화해야합니까?
JJD

40
Java Code에서 할 수있는 일listView.setSelector(android.R.color.transparent);
sulai

@RoflcoptrException-> "TextView에 ColorStateList를 적용 할 수 있습니다"-목록 행을 클릭 할 수없는 경우이 옵션이 좋습니다. 텍스트 뷰를 클릭 할 수있게되면 목록 자체의 onClick 이벤트가 시작되지 않습니다.
Sebastian Hojas

189

RoflcoptrException의 대답은 트릭을 수행해야하지만 어떤 이유로 든 작동하지 않으므로 나를 위해 일한 솔루션을 게시하고 있습니다.

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

101

주황색 하이라이트 효과는 ListView 의 스타일 입니다. 이 기사 는 listView 스타일을 재정의하는 방법에 대한 좋은 개요를 제공합니다.

기본적으로 현재 상태에 따라 다른 스타일 요소를 지정하는 선택기가 있습니다.

짧고 빠른 솔루션은 이것을 참조하십시오 https : //.com/a/12242564/185022


이 방법으로 각 listView 객체마다 다른 스타일을 사용할 수 있습니까? 또한 Sebi의 답변에서 제기 한 문제를 피할 수 있습니까?
John Moffitt

1
예, 모든 스타일 속성을 무시할 수 있습니다. 첫 번째 링크에 설명 된대로 style = "@ style / MyStyle"속성을 사용하여 각 ListView에 스타일을 구체적으로 지정할 수 있습니다.
Cheryl Simon

미안하지만 이것은 대답이되어서는 안됩니다. 변경 listSelector해야합니다.
Ayman Salah

63

에서 의 ListView : 사용 안 함 초점 강조 ,

ListAdapter다음 코드를 사용하도록 설정하면

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

이것은 BaseAdapter클래스 를 재정의합니다 . 또한 셀 사이의 흰색 테두리를 취소합니다.


4
장애인의 잘못된 항목에 대한 선택 동작 (하지 않습니다 화재 OnItemClicked)
산도르

6
이것은 목록보기 항목이 강조 표시되는지 여부가 미학적 항목보다 행동 문제이기 때문에 좋은 솔루션입니다. 따라서 선택할 수있는 속성을 원하지 않는 목록보기에이를 사용할 수 있습니다. 전역 스타일은 실제로 의미가 없습니다. 결국 선택할 있는 목록보기 를 원할 것이므로 스타일을 사용하여 나에게 잘못되기 때문입니다. 그것들은 의미 적 의미를 가져서는 안되며 미적이어야합니다. 선택성의 속성은 의미론적인 것입니다.
토마스 디냥

그 외에도이 질문에 대한 답 isEnabled은 아니며, 항목을 비활성화하도록 재정의하는 것이 비활성화하는 방법이 아닙니다! 문서에 따르면 isEnabled항목이 구분 기호인지 확인해야합니다.
Bakhshi

39

이것을 listselector와 함께 XMl에 추가하십시오.

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

2
많은 감사합니다. 스크롤 할 때 (Android 2.3 이전에만 발생) 전체 listView가 강조 표시되는 문제 (내 경우에는 흰색)가 해결되고 싶습니다. 그리고 그것은 작동합니다.
Yeung

다양한 종류의 "# 00000000"및 "@android : color / transparent"?
안드로이드

@Androider 2011 년에 나중에 사람들에게 두 가지 방식으로 작동한다는 사실을 알려주었습니다 ... 확실히 오늘 당신은 # 000000
sheetal

32

당신이 사용하는 경우 ArrayAdapter또는 BaseAdapter목록 항목을 채 웁니다. 방법 및 수익 .OverrideisEnabledfalse

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

13

가상 및 실제 기기에서 'Google'을 몇 번 테스트하고 테스트 한 결과 아래 코드가 작동하는 것을 알 수 있습니다.

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

areAllItemsEnabled()부분을 생략했습니다 .


이것은 나를 위해 일했다. 그러나 비활성화 된 상태의 행에 대한 드로어 블이있는 경우 이미지도 변경된다는 의미는 아닙니까? 클릭을 비활성화하고 드로어 블을 변경할 수는 없습니까?
안드로이드 개발자

1
이로 인해 ListView에 분배기가 표시되지 않는 부작용이 있습니다.
Maciej Pigulski

11

아무것도 나에게 도움이되지 않습니다.

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

코드에서

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

작고 투명한 이미지를 드로어 블 폴더에 추가합니다.

예 : transparent.xml

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

5

저에게는 android:focusableInTouchMode="true"갈 길입니다. android:listSelector="@android:color/transparent" 쓸모가 없습니다. 각 행에 많은 객체가 포함 된 사용자 정의 목록보기를 사용하고 있습니다.


5

다음을 추가하기 만하면됩니다. android:cacheColorHint="@android:color/transparent"


5

대안으로 :

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

또는

listView.setSelector(new StateListDrawable());

1

이를 수행하는 빠르고 쉬운 방법이 있습니다.

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

그것이 도움이되기를 바랍니다.)


이 C #은 자바가 아닙니다
Anthony

안드로이드 스튜디오가 지원하는 것이기 때문에 대부분의 안드로이드 프로그래머는 여전히 자바를 사용하고 있다고 생각하지만 C #을 사용할 수 있습니다. 나는 이것이 C # : D임을 명확히하고 싶다.
Anthony

0

단일 목록보기 항목에 대해 강조 표시를 비활성화하고 셀을 활성화 된 상태로 유지하려면 강조 표시를 비활성화하도록 해당 셀의 배경색을 설정하십시오.

예를 들어 셀 레이아웃에서 android:background="@color/white"


0

당신은 pos당신이 얻는 것을 얻을 수 있고 할 수 있습니다 onItemClick :

listView.setItemChecked(pos, false);

그것이 내가 아는 가장 좋은 방법입니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.