Android の ListView に関する投稿です。
TextView が項目となっている ListView を使って、「クリックしたら項目が薄くなって、取り消し線が引かれる」という機能を実装してみます。
目標
実装
3つ変数を宣言します。
MainActivity.java
private ListView listView;
private ArrayAdapter adapter;
private List<String> items;
初期化します。
今回は凝ったデザインにはしないので、ArrayAdapter には simple_expandable_list_item_1
を渡します。(楽)
MainActivity.java
listView = (ListView) findViewById(R.id.main_list);
items = new ArrayList<>();
adapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, items);
大切な部分
ListView の子 View は今回は TextView になっています。
だから、View view
の部分で渡されるインスタンスは TextView
型です。
これを利用していきます。
MainActivity.java
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView textView = (TextView) view;
// 色を変える
textView.setTextColor(Color.LTGRAY);
// 取り消し線を引く
TextPaint paint = textView.getPaint();
paint.setFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
paint.setAntiAlias(true);
}
});
全体
MainActivity.java はこんな感じになります。
MainActivity.java
public class MainActivity extends AppCompatActivity {
private ListView listView;
private ArrayAdapter adapter;
private List<String> items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.main_list);
items = new ArrayList<>();
adapter = new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1, items);
listView.setAdapter(adapter);
addDummyItems(items);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView textView = (TextView) view;
textView.setTextColor(Color.LTGRAY);
TextPaint paint = textView.getPaint();
paint.setFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
paint.setAntiAlias(true);
}
});
}
private void addDummyItems(List<String> items) {
int size = 10;
for (int i = 0; i < size; i++) {
items.add("テキスト" + i);
}
}
}
TextPaint強い
こんなクラスがあることを初めて知りました。
簡単な ToDo アプリとかに使えそうです。