Как выделить кнопку при нажатии?
Я делаю викторину Andorid, и я хочу выделить кнопку, когда она щелкнула, но когда пользователь отпустит кнопку, чтобы она превратилась в исходный цвет. Вы видите, что я установил фон кнопки, чтобы кнопки можно было округлить. Я установил это в drawable.
<Button
android:id="@+id/btn1"
android:background="@drawable/roundedbutton"
android:textColor="#ffffff"
android:textStyle="italic"
android:layout_width="225sp"
android:layout_marginTop="23sp"
android:layout_height="38sp"
android:layout_alignLeft="@+id/btn2"
android:layout_below="@+id/textView1"
android:text="Button" />
roundedbutton.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:padding="10dp">
<solid android:color="#848482"/> <!-- this one is ths color of the Rounded Button -->
<corners
android:bottomRightRadius="6.5dp"
android:bottomLeftRadius="6.5dp"
android:topLeftRadius="6.5dp"
android:topRightRadius="6.5dp"/>
</shape>
Ответы
Ответ 1
Вы можете использовать OnTouchListener
, или вы можете использовать селектор.
button.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// change color
}
else if (event.getAction() == MotionEvent.ACTION_UP) {
// set to normal color
}
return true;
}
});
Вы также можете использовать селектор. Границы и закругленный прямоугольник. Настройте то же самое.
bkg.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"
android:shape="rectangle">
<solid android:color="#0AECBF"/>
<stroke android:width="3dp"
android:color="#0FECFF" />
<padding android:left="5dp"
android:top="5dp"
android:right="5dp"
android:bottom="5dp"/>
<corners android:bottomRightRadius="7dp"
android:bottomLeftRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp"/>
</shape>
нажата .xml в папке с возможностью переноса
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#ff33ffff" />
<padding android:left="5dp"
android:top="5dp"
android:right="5dp"
android:bottom="5dp"/>
<corners android:bottomRightRadius="7dp"
android:bottomLeftRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp"/>
</shape>
Теперь установите фон для вашей кнопки в xml
android:background="@drawable/bkg"
Ответ 2
используйте селектор, подобный этому, и установите фон кнопок на рисование.
<?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/blue" /> <!-- pressed -->
<item android:state_focused="true"
android:drawable="@drawable/blue" /> <!-- focused -->
<item android:drawable="@drawable/red" /> <!-- default -->
</selector>
Ответ 3
Изменить roundedbutton.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"><shape android:padding="10dp" android:shape="rectangle">
<solid android:color="#ff0000" />
<!-- this one is ths color of the Rounded Button -->
<corners android:bottomLeftRadius="6.5dp" android:bottomRightRadius="6.5dp" android:topLeftRadius="6.5dp" android:topRightRadius="6.5dp" />
</shape></item>
<item><shape android:padding="10dp" android:shape="rectangle">
<solid android:color="#848482" />
<!-- this one is ths color of the Rounded Button -->
<corners android:bottomLeftRadius="6.5dp" android:bottomRightRadius="6.5dp" android:topLeftRadius="6.5dp" android:topRightRadius="6.5dp" />
</shape></item>
</selector>
Ответ 4
Если вы хотите сделать это программно, вы также можете попробовать один из следующих двух методов: -
btn1.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFFAA0000));
или таким образом
btn1.getBackground().setColorFilter(0xFFAA4400,PorterDuff.Mode.MULTIPLY);
просто поместите этот код в свой метод onCreate, и он это сделает. Вы можете изменить цветовые коды в соответствии с вашим выбором.
Надеюсь, что это поможет.
Ответ 5
Если вы не хотите создавать 2 чертежа с помощью селектора xml или 2 фигуры или даже не хотите заниматься программным обеспечением с помощью цветового фильтра, вы можете использовать встроенную подсветку Android, используя selectableItemBackground attibute:
<!-- Background drawable for bordered standalone items that need focus/pressed states. -->
<attr name="selectableItemBackground" format="reference" />
в вашем xml.
Например:
<ImageButton
android:id="@+id/btn_help"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_help"
android:background="?android:selectableItemBackground"/>
Ответ 6
Исходный код
https://drive.google.com/open?id=0BzBKpZ4nzNzUQ3RKZjE0eG15Rlk
selector.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>
normalpressed.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/colorPrimary"/>
<stroke android:width="3dp"
android:color="@color/colorPrimaryDark" />
<padding android:left="5dp"
android:top="5dp"
android:right="5dp"
android:bottom="5dp"/>
<corners android:bottomRightRadius="7dp"
android:bottomLeftRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp"/>
</shape>
pressed.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!--<solid android:color="#ff33ffff" />-->
<solid android:color="@color/colorHighLight" />
<padding android:left="5dp"
android:top="5dp"
android:right="5dp"
android:bottom="5dp"/>
<corners android:bottomRightRadius="7dp"
android:bottomLeftRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp"/>
</shape>
**button**
<Button
android:id="@+id/btn_sign_in"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@drawable/selector"
android:drawableLeft="@android:drawable/btn_star_big_on"
android:drawablePadding="10dp"
android:layout_marginLeft="20dp"
android:layout_marginTop="90dp"
android:layout_marginRight="20dp"
android:gravity="center"
android:paddingLeft="10dp"
android:paddingRight="30dp"
android:text="Sign In"
android:textColor="#ffffff"
tools:layout_editor_absoluteY="0dp"
tools:layout_editor_absoluteX="8dp" />