Android TableRow фон - PullRequest
       3

Android TableRow фон

1 голос
/ 16 марта 2011

У меня проблема с TableRow, который я добавляю динамически.

private void addRow(String body) {
        LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        TableRow row = (TableRow) inflater.inflate(R.layout.customrow,null);
        TextView name = (TextView) row.findViewById(R.id.customName);
        name.setText(body);                        
        row.setOnLongClickListener(this);       
    }

Я бы хотел, чтобы этот ряд изменил цвет при onClick и onLongClick.

Код в файле customrow.xml:

<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
       android:id="@+id/tableRow1" 
       android:layout_gravity="center" 
       android:layout_height="wrap_content" 
       android:layout_width="fill_parent" 
       android:gravity="center_vertical" 
       android:onClick="showOnClick">    
    <TextView android:id="@+id/customName"
        android:textSize="25px"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:layout_weight="5">
    </TextView>
</TableRow>

Я пытался использовать android:background="@drawable/clickedbackground" со строкой, но она не работает.

Код в файле clickedbackground.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">        
    <item android:state_selected="true" android:state_focused="false"
        android:state_pressed="false" android:drawable="@android:color/transparent" />
    <item android:state_selected="false" android:state_focused="false"
        android:state_pressed="false" android:drawable="@android:color/transparent" />
    <item android:state_pressed="true" android:drawable="@color/custom" />
    <item android:state_focused="true" android:state_selected="true"
        android:state_pressed="false" android:drawable="@color/custom" />
</selector>

Кто-нибудь знает, что я делаю неправильно (цвет / обычай определяется в другом xml, который работает)?

Спасибо

Ответы [ 4 ]

2 голосов
/ 13 июля 2011

Вы создаете объект для tablerow именованной строки.и у вас есть также clickedbackground.xml файл.просто используйте приведенный ниже код в методе addRow.

row.setBackgroundResource(R.drawable.clickedbackground);

Я думаю, что это решит вашу проблему.

0 голосов
/ 07 сентября 2013

не забудьте добавить в стиль

<item name="android:focusable">true</item>
        <item name="android:clickable">true</item>

В противном случае вы не сможете использовать состояния rowLayout.

0 голосов
/ 29 марта 2011

Добавление

<resources>
 <style name="row" parent="@android:style/Widget.Button">
     <item name="android:background">@drawable/rows</item>
</style>
</resources>

в styles.xml и установка

style="@style/row"

в TableRow сделали работу.

, где rows.xml в отрисовке

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
    android:state_enabled="false"
        android:drawable="@color/blue" />
    <item
        android:state_pressed="true"
        android:state_enabled="true"
        android:drawable="@color/custom" />
    <item
        android:state_focused="true"
        android:state_enabled="true"
        android:drawable="@color/white" />
    <item
        android:state_enabled="true"
        android:drawable="@android:color/transparent" />
</selector>
0 голосов
/ 16 марта 2011

В вашем методе addRow() вы надуваете строку, но не добавляете ее ни в какой родительский макет, и, поскольку row является локальной переменной, я думаю, вы не делаете это где-то еще,проблема копирования / вставки?

Опять же, ваш customrow.xml может не работать, потому что у открывающего тега TableRow отсутствует закрывающий >, но это может быть проблема копирования / вставки.

Использование android:background="@drawable/bg" с bg в качестве селектора является распространенным шаблоном, и оно должно работать.Возможно, вы захотите упростить ваш селектор: вам не нужно указывать все состояния для каждого элемента и все комбинации.Он работает с «первым соответствием», поэтому он выполнит свою работу:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">        
    <item android:state_pressed="true" android:drawable="@color/custom" />
    <item android:state_selected="true" android:drawable="@android:color/transparent" />
    <item android:state_focused="true" android:drawable="@color/custom" />
    <item android:drawable="@android:color/transparent" />
</selector>

Кроме того, обратите внимание, что выделенный и сфокусированный - это два разных состояния , причем фокусом является то, которое вы получаете, когдаперемещаться с помощью dpad.

Если это не помогло, укажите, что означает "не работает": что вы ожидаете?что происходит вместо этого?

...