プロジェクトの要件として、onClickでテーブルの行を強調表示する必要があります。これを行う方法はありますか?または私に代替案を提案してください?
一般的なListViewのようにクリックハイライトでストックを使用する場合は、各行の背景をAndroid:background="@Android:drawable/list_selector_background"
に設定します。
次に例を示します。
<TableLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:stretchColumns="0">
<TableRow
Android:id="@+id/first_row"
Android:background="@Android:drawable/list_selector_background" >
... row content ...
</TableRow>
</TableLayout>
次に、コードで、
TableRow firstRow = (TableRow) findViewById(R.id.first_row);
firstRow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO: do your logic here
}
}
そして、ListViewのように、ハイライト可能な行を取得する必要があります...
EDIT:上記は、デフォルトのテーマのリスト背景セレクターを提供します。より一般的なセレクター(ユーザーが行に触れたときのマテリアルデザインセレクターなど)が必要な場合は、次を使用します。
Android:background="?android:attr/selectableItemBackground"
また、これはTableRowsだけではありません。これは、onClickListenerが接続されているほとんどすべての汎用ウィジェット(TextViews、Buttonsなど)で実行できるはずです。
私でさえ、サリルパンディットの助けを借りて同じ問題に直面していましたが、それに少し変更を加えました。
これはxmlのTableRow
です:
<TableRow
Android:id="@+id/tableRow1"
Android:layout_width="wrap_content"
Android:layout_height="0dp"
Android:layout_weight="1"
Android:padding="5dip"
Android:background="@drawable/selector">
これは selector.xml
in res\drawable
フォルダ
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item Android:state_focused="true"
Android:state_pressed="true"
Android:drawable="@Android:drawable/list_selector_background"></item>
<item Android:state_focused="true"
Android:state_pressed="false"
Android:drawable="@Android:drawable/list_selector_background"></item>
<item
Android:state_focused="false"
Android:state_pressed="true"
Android:drawable="@Android:drawable/list_selector_background" />
<item Android:drawable="@Android:drawable/list_selector_background"></item>
</selector>
Onclicklistener内に以下を追加します。
tr1.setBackgroundResource(drawable.list_selector_background);
ここで、tr1はテーブルローです。 (テーブルローを機能させるには、テーブルローをファイナルにする必要があります)。
private OnClickListener tablerowOnClickListener = new OnClickListener()
{
public void onClick(View v)
{
//Highlight selected row
//Highlight selected row
//Start from 0 to make sure that the first item will also be looped
//through
for (int i = 0; i < tblItemDetail.getChildCount(); i++)
{
View row = tblItemDetail.getChildAt(i);
if (row == v)
{
row.setBackgroundColor(getResources().getColor(Android.R.color.holo_red_light));
}
else
{
//Change this to your normal background color.
row.setBackgroundColor(getResources().getColor(Android.R.color.transparent));
}
}
//...
}
};
String _row_selected = null;
boolean _is_selection_even = false;
private TableLayout TL;
TableRow row_data = new TableRow(this);
row_data.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (_row_selected != null) {
if (Integer.parseInt(_row_selected) == TL.indexOfChild(v)) {
if (_is_selection_even) {
TL.getChildAt(Integer.parseInt(_row_selected)).setBackgroundColor(0xFF00FF00);
_is_selection_even = false;
} else {
TL.getChildAt(Integer.parseInt(_row_selected)).setBackgroundColor(Color.WHITE);
_is_selection_even = true;
}
} else {
TL.getChildAt(Integer.parseInt(_row_selected)).setBackgroundColor(Color.WHITE);
v.setBackgroundColor(0xFF00FF00);
_row_selected = null;
_row_selected = TL.indexOfChild(v) + "";
}
} else {
v.setBackgroundColor(0xFF00FF00);
_row_selected = null;
_row_selected = summaryTL.indexOfChild(v) + "";
}
}
});