Изменение цвета фона линейного макета при нажатии

У меня есть линейная компоновка в моем xml, и я добавляю еще один линейный макет (содержащий два текстовых поля) к этому линейному макету через java. Эффекты Touch прекрасно работают, но я хочу выделить выбранный линейный макет, установив цвет фона. Пожалуйста посоветуй.

Solutions Collecting From Web of "Изменение цвета фона линейного макета при нажатии"

Определить background.xml в папке с возможностью переноса

 <?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 в папке с возможностью переноса

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#FFFFFF"/> </shape> 

В папке с нажатой.xml

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#FF1A47"/> </shape> 

Затем установите фон в макет

  android:background="@drawable/background" 

Вы также можете установить фон как показано ниже

В касании вашего макета

  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; } }); 

Независимо от выбранного LinearLayout метода (XML / код) – убедитесь, что вы используете LinearLayout :

XML:

 android:clickable="true" 

Код:

 myLinearLayout.setClickable(true); 

Поместите файл selector.xml в папку с возможностью переноса (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> 

И установить фон вашей линейной компоновки в xml-файле

 android:background="@drawable/background" 

Следующий метод заставит вас хотеть, что вы хотите. Даже анимация пульсации в Lollipop. Просто передайте контекст view (может быть линейный макет):

 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(); } 

Вот мое решение, это очень просто:

 <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> 

Попробуйте функцию View setBackgroundColor()

Смотрите документы 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