web-dev-qa-db-ja.com

クリック時にテーブルの行を強調表示するにはどうすればよいですか?

プロジェクトの要件として、onClickでテーブルの行を強調表示する必要があります。これを行う方法はありますか?または私に代替案を提案してください?

17
Ravi

一般的な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など)で実行できるはずです。

26
Salil Pandit

私でさえ、サリルパンディットの助けを借りて同じ問題に直面していましたが、それに少し変更を加えました。

これは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>
11
Zombie

Onclicklistener内に以下を追加します。

 tr1.setBackgroundResource(drawable.list_selector_background);

ここで、tr1はテーブルローです。 (テーブルローを機能させるには、テーブルローをファイナルにする必要があります)。

9
Denis
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));
            }
        }
        //...
    }
};
2
Bhhruguni
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) + "";
                }
              }
        });
0
Bhaskar Vaddadi