Cambiar el color de fondo del diseño Lineal al hacer clic
Estoy teniendo un diseño lineal en mi xml y estoy añadiendo otro diseño lineal (que contiene dos textviews) a ese diseño lineal a través de java. Los eventos táctiles funcionan perfectamente, pero quiero resaltar el diseño lineal seleccionado configurando el color de fondo. Por favor aconséjame.
Definir background.xml en la carpeta dibujable
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/pressed" /> <item android:state_focused="false" android:drawable="@drawable/normal" /> </selector>
Normal.xml en carpeta dibujable
<?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#FFFFFF"/> </shape>
Comprimido.xml en carpeta dibujable
<?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#FF1A47"/> </shape>
A continuación, establecer el fondo de su diseño
android:background="@drawable/background"
También puede configurar el fondo como a continuación
Al toque de su diseño
ll.setOnTouchListener( new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch(event.getAction()) { case MotionEvent.ACTION_DOWN: ll.setBackgroundColor(Color.RED); break; case MotionEvent.ACTION_UP: //set color back to default ll.setBackgroundColor(Color.WHITE); break; } return true; } });
Independientemente del método que haya elegido (XML / código) – asegúrese de hacer que su LinearLayout
clic en:
XML:
android:clickable="true"
Código:
myLinearLayout.setClickable(true);
Ponga el archivo selector.xml en una carpeta dibujable (res / drawable)
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/list_focused" android:state_pressed="true"/> <item android:drawable="@drawable/list_focused" android:state_enabled="true" android:state_focused="true" android:state_window_focused="true"/> <item android:drawable="@drawable/list_raw_img"/> </selector>
Y establecer el fondo de su disposición lineal en el archivo xml
android:background="@drawable/background"
El siguiente método te hará querer lo que quieres. Incluso la animación de onda en Lollipop. Simplemente pase un contexto la vista (puede ser un diseño lineal):
public static void setClickableAnimation(final Context context, final View view) { final int[] attrs = new int[]{R.attr.selectableItemBackground}; final TypedArray typedArray = context.obtainStyledAttributes(attrs); final int backgroundResource = typedArray.getResourceId(0, 0); view.setBackgroundResource(backgroundResource); typedArray.recycle(); }
Aquí está mi solución, es muy simple:
<LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/bg_pressed_tab" android:clickable="true" android:focusable="true" android:focusableInTouchMode="true" android:gravity="center" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/app_name" android:src="@mipmap/ic_launcher" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/service_request" android:textColor="@color/white" android:textSize="@dimen/text_size_small" /> <requestFocus /> </LinearLayout>
Bg_tab_pressed.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_longAnimTime"> <item android:drawable="@color/colorPrimaryDark" android:state_focused="true" android:state_pressed="true" /> <item android:drawable="@color/colorPrimaryDark" android:state_focused="false" android:state_pressed="true" /> <item android:drawable="@color/colorPrimaryDark" android:state_focused="true" android:state_pressed="false" /> <item android:drawable="@color/colorPrimary" android:state_focused="false" android:state_pressed="false" /> </selector>
Pruebe la función View
setBackgroundColor()
Consulta los documentos de Android:
http://developer.android.com/reference/android/view/View.html#setBackgroundColor%28int%29
public void setBackgroundColor (int color) Added in API level 1 Sets the background color for this view. Parameters color the color of the background