In der Anwendung, an der ich arbeite, muss ich dynamisch ein LinearLayout erstellen. In diesem Fall der Befehl
ll.setClickable(true);
funktioniert nicht wie vorgesehen. Obwohl ich möglicherweise etwas vermisse, habe ich es geschafft, setOnTouchListener zu nutzen, um das gleiche Ergebnis zu erzielen, und ich sende den Code, falls jemand die gleichen Bedürfnisse hat.
Der folgende Code erstellt ein LinearLayout mit zwei Textansichten und runden Ecken, dessen Farbe sich beim Drücken ändert.
Erstellen Sie zunächst zwei XML-Dateien in einem zeichnbaren Ordner, eine für den normalen und eine für den gedrückten linearen Layoutstatus.
Normalzustand xml (drawable / round_edges_normal.xml)
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#FFFFFF" />
<corners android:radius="7dp" />
<padding android:left="5dip" android:top="5dip" android:right="5dip" android:bottom="5dip" />
</shape>
</item>
<item android:bottom="3px">
<shape android:shape="rectangle">
<solid android:color="#F1F1F1" />
<corners android:radius="7dp" />
</shape>
</item>
</layer-list>
Gedrückter Status xml (drawable / round_edges_pressed.xml). Der einzige Unterschied ist in der Farbe ...
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="#FFFFFF" />
<corners android:radius="7dp" />
<padding android:left="5dip" android:top="5dip" android:right="5dip" android:bottom="5dip" />
</shape>
</item>
<item android:bottom="3px">
<shape android:shape="rectangle">
<solid android:color="#add8e6" />
<corners android:radius="7dp" />
</shape>
</item>
</layer-list>
Dann erledigt der folgende Code den Job
Globale Variable:
public int layoutpressed = -1;
In onCreate()
:
// Create some textviews to put into the linear layout...
TextView tv1 = new TextView(this);
TextView tv2 = new TextView(this);
tv1.setText("First Line");
tv2.setText("Second Line");
// LinearLayout definition and some layout properties...
final LinearLayout ll = new LinearLayout(context);
ll.setOrientation(LinearLayout.VERTICAL);
// it is supposed that the linear layout will be in a table.
// if this is not the case for you change next line appropriately...
ll.setLayoutParams(new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
ll.setBackgroundResource(R.drawable.rounded_edges_normal);
ll.addView(tv1);
ll.addView(tv2);
ll.setPadding(10, 10, 10, 10);
// Now define the three button cases
ll.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
if (arg1.getAction()==MotionEvent.ACTION_DOWN){
ll.setBackgroundResource(R.drawable.rounded_edges_pressed);
ll.setPadding(10, 10, 10, 10);
layoutpressed = arg0.getId();
}
else if (arg1.getAction()== MotionEvent.ACTION_UP){
ll.setBackgroundResource(R.drawable.rounded_edges_normal);
ll.setPadding(10, 10, 10, 10);
if(layoutpressed == arg0.getId()){
// ...........................................................................
// Code to execute when LinearLayout is pressed...
// ...........................................................................
}
}
else{
ll.setBackgroundResource(R.drawable.rounded_edges_showtmimata);
ll.setPadding(10, 10, 10, 10);
layoutpressed = -1;
}
return true;
}
});