3

ListViewをカスタマイズして、各行にデフォルトの背景画像と強調表示された背景画像を設定しようとしています。

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

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

これは私のコードです:

layout / 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"
/>

drawable / 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画像を使用します。

これは私が持っているものですがこれは私が欲しいものです

4

3 に答える 3

1

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

layout / 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>

layout / 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"    
/>

drawable / 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>

Drawable png画像:
drawable / bg_default.png:
bg_default

drawable / 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

于 2012-04-24T23:21:20.170 に答える
0

私が見ている問題は、実際にはここでListViewの背景全体としてアイテムセレクターを使用していることです。

lv.setBackgroundResource(R.drawable.selector);

あなたがしなければならないのは、このセレクターをあなたの内部のルートビューの背景として設定することですlayout/list.xml(リスト内の各アイテムのために膨らんだレイアウト)

于 2012-04-23T00:08:28.280 に答える
0

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

于 2012-04-23T02:18:12.900 に答える