2012-04-22 7 views
3

ListViewをカスタマイズして、デフォルトの背景イメージと各行のハイライトされた背景イメージを持つようにしようとしています。リストビュー内の各行の背景

ただし、強調表示された背景イメージは単一行に影響し、デフォルトの背景イメージは全体でListViewに影響します。しかし、私はそれが各単一の行に影響を与える必要があります。

誰かがこれを行う方法を教えてもらえますか?

これは私のコードです:

レイアウト/ main.xml:

<ListView 
android:id="@+id/list" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:dividerHeight="1dip"  
android:listSelector="@drawable/bg_highlighted" 
/> 

描画可能/ selector.xml:

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

<item android:state_selected="true" android:drawable="@drawable/bg_default"/> 
<item android:state_focused="true" android:drawable="@drawable/bg_default"/> 

</selector> 

のsrc/main.java:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
      this,R.layout.list, mStrings); /*"Item1","Item2","Item3","Item4"*/ 
    ListView lv = (ListView)findViewById(R.id.list); 
    lv.setAdapter(adapter); 
    lv.setBackgroundResource(R.drawable.selector); 

デフォルトの背景とハイライトされた背景として、私はpng画像を使用します。

This is what I haveしかし、this is what I want

+0

を参照してください:[リンク](http://stackoverflow.com/a/2830994/1204249) – amp

答えて

0

arrayadapterを使用する代わりに、baseadapterを拡張する新しいクラスを使用し、getviewメソッドから各行の背景を変更するほうが良いでしょう。

0

私が見る問題は、あなたが実際にここで全体のListViewの背景として項目セレクタを使用している次のとおりです。

lv.setBackgroundResource(R.drawable.selector); 

あなたがしなければならないのは、の背景として、このセレクタを設定することですlayout/list.xmlの中のルートビュー

1

heepieが好きでした。
そして、わたしが理解しているように、背景ドロウアブルをListViewという単一行に直接設定できるプロパティはありません。カスタムアダプタのメソッドgetViewでカスタムビューを作成することによって行う必要があります。これが私の最終的なコードです。それは誰かにとって有益なことかもしれません。

レイアウト/ main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout  
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" > 

     <ListView 
      android:id="@+id/my_list" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
     /> 

</LinearLayout> 

レイアウト/ my_list_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/my_textview" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:gravity="left|center_vertical" 
    android:paddingLeft="6dip" 
    android:textColor="#FFFFFF" 
    android:background="@drawable/list_selector"  
/> 

描画可能/ list_selector.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@drawable/bg_highlighted" /> 
    <item android:drawable="@drawable/bg_default" /> 
</selector> 

Drawablイメージをpng:
drawable/bg_default。PNG:
​​

描画可能/ bg_highlighted.png:
bg_highlighted

のsrc/main.java:

public class main extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     MyAdapter adapter; 
     ArrayList<String> mStrings = new ArrayList<String>(); 
     mStrings.add("Item 1"); 
     mStrings.add("Item 2"); 
     mStrings.add("Item 3"); 
     mStrings.add("Item 4"); 

     ListView lv = (ListView) findViewById(R.id.my_list); 
     adapter = new MyAdapter(this, mStrings); 
     lv.setAdapter(adapter); 
    } 
} 

のsrc/MyAdapter.java:

public class MyAdapter extends BaseAdapter { 

public Activity activity; 
ArrayList<String> data = new ArrayList<String>(); 
private static LayoutInflater inflater = null; 

public MyAdapter(Activity a, ArrayList<String> d) { 
    activity = a; 
    data = d; 
    inflater = LayoutInflater.from(activity); 
}  

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    ViewHolder holder = null; 
    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.my_list_item, null); 
     holder = new ViewHolder(); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder)convertView.getTag(); 
    } 

    convertView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //Touch on view handle 
      Log.d("", "Touched row "+position); 
     } 

    }); 

    //customizing view 
    holder.textView = (TextView)convertView.findViewById(R.id.my_textview); 
    holder.textView.setText(data.get(position)); 

    return convertView; 
}  

public static class ViewHolder { 
    public TextView textView; 
} 
@Override 
public int getCount() { 
    return data.size(); 
} 
@Override 
public Object getItem(int position) { 
    return position; 
} 
@Override 
public long getItemId(int position) { 
    return position; 
} 
} 

そして、これが結果です:これはあなたを助けている場合

result.png

関連する問題