Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在单击时高亮显示表格行?_Android_Highlight_Android Tablelayout - Fatal编程技术网

Android 如何在单击时高亮显示表格行?

Android 如何在单击时高亮显示表格行?,android,highlight,android-tablelayout,Android,Highlight,Android Tablelayout,作为我的项目要求,我必须突出显示onClick上的表行。有没有办法做到这一点?或者请你给我推荐一个替代方案 如果您想像使用一般ListView一样使用点击突出显示的股票,您需要将每行的背景设置为android:background=“@android:drawable/list\u selector\u background” 以下是一个例子: <TableLayout android:layout_width="fill_parent" android:layout_height

作为我的项目要求,我必须突出显示onClick上的表行。有没有办法做到这一点?或者请你给我推荐一个替代方案

如果您想像使用一般ListView一样使用点击突出显示的股票,您需要将每行的背景设置为
android:background=“@android:drawable/list\u selector\u 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>
您应该得到一个可高亮显示的行,就像在ListView中一样

编辑: 上面将为您提供默认主题的列表背景选择器。如果需要更通用的选择器(如用户触摸行时的材质设计选择器),请使用以下选项:

android:background="?android:attr/selectableItemBackground"

这也不仅仅适用于表行。您应该能够在几乎任何附加了onClickListener(文本视图、按钮等)的通用小部件上执行此操作。

在onClickListener中添加:

 tr1.setBackgroundResource(drawable.list_selector_background);

其中tr1是您的tablerow。(您需要将tablerow设置为最终版本,它才能正常工作)。

即使是在salil pandit的帮助下,我也面临着同样的问题。answer对它做了一点修改,这对我来说很有效

这是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">
private OnClickListener表rownclicklistener=new OnClickListener()
{
公共void onClick(视图v)
{
//突出显示选定行
//突出显示选定行
//从0开始,确保第一个项目也将循环
//通过
对于(int i=0;i
@SalilPandit的带行选择器的编程版本:

final TableRow row = new TableRow(this);

row.setBackgroundResource(android.R.drawable.list_selector_background);

row.setOnClickListener(new View.OnClickListener(){            

     @Override
     public void onClick(View view){
         row.setFocusable(true);
         // TODO
     }
});
对于通用选择器(材料设计):


有点晚了,但请检查此线程的答案:您可以参考Josh Clemm给出的答案。请查看此处编辑的答案:您显然没有测试过此问题。所有这些都是设置表行的背景色,并向行中添加一个单击侦听器,仅此而已。我已经对其进行了测试,并在生产中成功地使用了它。你说得对,它确实设置了背景。它设置的是按键-
@android:drawable/list\u selector\u background
是当你点击列表视图中的一个条目时手机主题的标准突出显示。奇怪的是,在发表评论之前,你测试过它吗?我已经测试过了,它可以工作了。这正是我想要的:TableRow的按钮行为。您可以选择或更改突出显示的默认颜色吗?这与我的
Nexus 5
上的ListView行为有些不同。我看到一个橙色的背景色,与我的ListView的浅蓝色相对应。此外,ListView似乎会将颜色更改向下延伸到嵌套元素。我们会设法跟随,但请记住,在drawable文件夹下创建选择器时,请将selector.xml创建为可绘制资源。谢谢,但当我按该行时,它会高亮显示,然后再次返回以取消高亮显示!它起作用了。行onclick listener的表布局,并将此代码放入其中。
<?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>
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) + "";
                }
              }
        });
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));
            }
        }
        //...
    }
};
final TableRow row = new TableRow(this);

row.setBackgroundResource(android.R.drawable.list_selector_background);

row.setOnClickListener(new View.OnClickListener(){            

     @Override
     public void onClick(View view){
         row.setFocusable(true);
         // TODO
     }
});
TypedValue typeValue = new TypedValue();
this.getTheme().resolveAttribute(android.R.attr.selectableItemBackground,
                                 typeValue, true);

final TableRow row = new TableRow(this);
row.setBackgroundResource(typeValue.resourceId);

row.setOnClickListener(new View.OnClickListener(){

    @Override
    public void onClick(View view){
          row.setFocusable(true);
          // TODO
    }
});