Android:listViewクリックのハイライトを無効にする


302

listView行にタッチしたときに発生するオレンジ色のハイライトを無効にしたいのですが。これまでのところ、私のxmlで次のことを試しました。

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

詳細:ユーザーがこのlistViewオブジェクトの画面に触れたときに、差がゼロになるようにします。

回答:


674

これをあなたのxmlに追加してください:

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

そして問題のためにこれはうまくいくかもしれません(私にはわかりませんし、より良い解決策があるかどうかわかりません):

ColorStateListをTextViewに適用できます。


2
透明がまだ選択を少し暗くしている場合、おそらく完全に透明として定義されていません。代わりに#00000000を試してください。これは完全に見えません。
Ridcully

私にとって完璧なソリューション。レイアウトを囲むリストビューの背景に透明なセレクターXMLドローアブルを設定しようとしましたが、これにより、前述のICSデバイスのオレンジ色のバーが表示されます。
Markus Rudel

@RoflcoptrExceptionリストにを使用Fragmentします。XMLレイアウトには、LinearLayoutおよび複数のTextViewアイテムが含まれています。行のハイライトを無効にするにはどうすればよいですか?
JJD 2012

40
Javaコードから、次のことができます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://stackoverflow.com/a/12242564/185022


このメソッドを使用すると、listViewオブジェクトごとに異なるスタイルを設定できますか?また、セビの答えで私が提起した問題を回避することは可能ですか?
John Moffitt、

1
はい、任意のスタイル属性を上書きできます。最初のリンクで説明されているように、style = "@ style / MyStyle"属性を使用して、各ListViewにスタイルを具体的に割り当てることができます。
シェリルサイモン、

申し訳ありませんが、これは答えではありません。それを変更するlistSelector必要があります。
Ayman Salah 2016

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は発生しません)
Sandor

6
リストビューアイテムが強調表示されているかどうかは、美的問題よりも行動上の問題であるため、これは良い解決策です。そのため、選択可能にするプロパティが不要なリストビューにこれを使用できます。最終的に選択できるリストビュー必要になることを知っているので、グローバルスタイルは実際には意味がありません。また、スタイルを使用して動作を確認するのは間違っているようです。それらは意味的な意味を持つべきではなく、美的意味を持つべきです。選択可能性の特性は、意味論的なものです。
Thomas Dignan

それを除いて、これはこの質問に対する答えでisEnabledはありません。アイテムを無効にするためのオーバーライドは、それを無効にする方法ではありません!ドキュメントは、それisEnabledがアイテムがセパレータであるかどうかを決定することになっていると言います。
Bakhshi 2017

39

これも、listselectorと一緒にur XMlに追加します。

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

2
どうもありがとう。スクロール時にlistView全体が強調表示される(私の場合は白色)の問題を解決したいと思います(Android 2.3より前でのみ発生します)。そしてそれは機能します。
Yeung 2013

"#00000000"と "@android:color / transparent"は種類の違いを表しますか?
Androider 2016

@Androider ya 2011年、私はそれが両方の方法で機能することを人々に知らせていました...確かに今日、あなたは#000000を必要としないでしょう
シート

32

ArrayAdapterまたはBaseAdapterを使用している場合は、リストアイテムを入力します。方法とリターン。OverrideisEnabledfalse

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

13

仮想デバイスと実際のデバイスでいくつかの「グーグル」化とテストを行った後、以下のコードが機能することに気づきました。

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

そのareAllItemsEnabled()部分を省略していることに注意してください。


これは私のために働いた。ただし、無効状態の行にドローアブルがある場合、イメージも変更されるという意味ではありませんか?クリックを無効にし、ドローアブルを変更しないことは可能ですか?
Android開発者

1
これには、ListViewに仕切りが表示されないという副作用があります。
Maciej Pigulski 2014年

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));

小さな透明な画像を描画可能なフォルダに追加します。

Like: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#はJavaではありません
Anthony

ほとんどのAndroidプログラマーは、Javaを使用していると思います。これは、Android Studioがサポートしているためですが、C#を使用することもできます。私は、これはC#であることを明確にしたい:D
アンソニー・

0

単一のリストビューアイテムの強調表示を無効にしたいが、セルを有効にしたままにする場合は、そのセルの背景色を設定して強調表示を無効にします。

たとえば、セルレイアウトで、 android:background="@color/white"


0

あなただけ取得することができposますから得ることonItemClick と実行します。

listView.setItemChecked(pos, false);

それが私が知る最良の方法です

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.