5

ListViewアプリのコードに があり、クリックすると を使用してクリックAdapterView.OnItemClickListenerを検出します。問題は、アイテムをクリックすると、そのアイテムの背景がデフォルトのオレンジではなく白に変わることです。このような:ここに画像の説明を入力

また、AdapterView を使用しない場合、クリックした項目は問題なくオレンジ色になります。クリックした項目の背景を再びオレンジ色にするにはどうすればよいですか?

編集:

リストのレイアウト: main.xml

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" 
    android:background="#00000000">


        <!-- ListView (grid_items) -->

        <ListView android:id="@+id/listview"
            android:layout_height="fill_parent"
            android:textSize="15px"
            android:layout_width="fill_parent"
            android:background="#00000000">
        </ListView>

</RelativeLayout>

onCreate():

public void onCreate(Bundle savedInstanceState) {try{
    super.onCreate(savedInstanceState);


    setContentView(R.layout.main);
    lv= (ListView)findViewById(R.id.listview);
    lv.setBackgroundColor(Color.TRANSPARENT);
    lv.setCacheColorHint(Color.TRANSPARENT);
    //......calculations
    for(int q = 0; q <v; q++){
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("col_1", array[q]);
        fillMaps.add(map);
        lv.setOnItemClickListener(onListClick);
    }
    //......calculations
    }

アダプタビュー:

private AdapterView.OnItemClickListener onListClick=new AdapterView.OnItemClickListener(){

public void onItemClick(AdapterView<?> parent,View view, int position, long id)
{

lv.setBackgroundColor(Color.TRANSPARENT);
lv.setCacheColorHint(Color.TRANSPARENT);
//.....calculations
}

使用されているカスタム テーマ:

    <?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomWindowTitleBackground">
        <item name="android:background">#323331</item>
    </style>

    <style name="CustomTheme" parent="android:Theme">
        <item name="android:windowTitleSize">35dip</item>
        <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
    </style>
</resources>
4

4 に答える 4

8

リスト ビュー アイテムをカスタマイズする最善の方法は、それらを xml ファイルで作成し、BaseAdapter またはその他の種類のリスト アダプターを使用して、その .xml レイアウトを拡張し、データを入力することです。ハイライト アニメーションをカスタマイズするために必要なのは、アイテムのさまざまな状態の状態 Drawable を作成することだけです。

したがって、「新しいxmlファイル」->「リソースタイプドローアブル」->「シェイプ」に移動し、名前を付けて終了すると、次のコードが表示されます。

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


</shape>

ListItem が押された状態の背景を作成しましょう。

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

    <solid android:color="#86d47f" this is your custom color />  

</shape>

押されていない状態は別のファイルです。

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

    <solid android:color="#00000000" />

</shape>

次に、リストビュー アイテムの背景として使用されるリスト セレクター ファイル: 「新しい xml ファイル」->「描画可能」->「リスト セレクター」に移動し、「item_background」と名前を付けます->finish

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"  android:exitFadeDuration="300"  !!this is the fade duration time for your animation>

    <item android:drawable="@drawable/bg_drawable" android:state_pressed="true"></item>
    <item android:drawable="@drawable/transparend"></item>

</selector>

次に、アイテムのxmlファイルを作成し、必要に応じてカスタマイズしますが、メインレイアウトセット用です

android:background="@drawable/item_background"

ほら、すべてが完璧に機能します...これが私のアダプタークラスです:

public class ListAdapter extends ArrayAdapter<String> {
LayoutInflater inflater;

public ListAdapter(Context context, int textViewResourceId,
        List<String> objects) {
    super(context, textViewResourceId, objects);
    inflater = LayoutInflater.from(context);

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    String str_value = this.getItem(position);
    if (convertView == null) {
        convertView = inflater.inflate(R.layout.list_item, null);
    }
    TextView tv = (TextView) convertView.findViewById(R.id.textView1);
    tv.setText(str_value);
    return convertView;
}

}

そしてここにあなたがいます、あなたはそれを答えとしてマークすると仮定します.. リスト

于 2013-06-06T06:26:57.350 に答える
0

これを試して、カスタムセレクターを設定してください:

「styles.xml」で、次のスタイルを作成します。

<style name="MyList">
        <item name="android:drawSelectorOnTop">true</item>
        <item name="android:listSelector">@drawable/my_list_selector</item>
</style>

レイアウトでは、このスタイルを ListView に追加するだけです。

<ListView
....
style="@style/MyList"
.... />

「drawable」では、目的の色または画像で「my_list_selector」を定義できます。

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true">
        <shape>
            <solid android:color="@color/state_pressed" />
        </shape>
    </item>
    <item android:state_focused="true">
        <shape>
            <solid android:color="@color/state_focused" />
        </shape>
    </item>
    <item android:drawable="@android:color/transparent" />

</selector> 

これらの色の値を「colors.xml」に追加します。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="state_pressed">#BB7dbcd3</color>
    <color name="state_focused">#777dbcd3</color>
    <color name="transparent">#00000000</color>
</resources>
于 2013-06-07T11:07:17.103 に答える
0

list_selector_background_longpress.9drawable フォルダー内に、白い写真の上にオレンジ色の線が入ったファイルがありました。それでholo_orange_darkカラーの写真に変えたら解決しました。そのような問題に対するなんとばかげた単純な解決策でしょう。

于 2013-06-09T09:43:52.497 に答える