Селектор для кнопки, которая изменяет свой фон и цвет текста

#android #button #selector #onclicklistener

#Android #кнопка #селектор #onclicklistener onclicklistener

Вопрос:

У меня есть группа из 3 кнопок, и я хочу изменить цвет и текст определенной кнопки при ее нажатии и снова вернуться к нормальному состоянию при нажатии другой кнопки.

Я использую селектор в первый раз, и я тоже не совсем понимаю состояния, может ли кто-нибудь помочь мне в этом.

вот что я делаю.

это мои 3 кнопки

 <LinearLayout
    android:id="@ id/lineartab"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:gravity="center|center_horizontal"
    android:orientation="horizontal"
    android:weightSum="3" >

    <Button
        android:id="@ id/allMessagesBT"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/message_top_btn_selector"
        android:singleLine="false"
        android:text="All nMessages"
        android:textColor="#7b818b"
        android:textSize="14sp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginBottom="3dp"
        android:layout_marginTop="3dp"
        android:background="@drawable/line" />

    <Button
        android:id="@ id/createNewBT"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/message_top_btn_selector"
        android:singleLine="false"
        android:text="Create nNew"
        android:textColor="#7b818b"
        android:textSize="14sp" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginBottom="3dp"
        android:layout_marginTop="3dp"
        android:background="@drawable/line" />

    <Button
        android:id="@ id/deleteBT"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/message_top_btn_selector"
        android:singleLine="false"
        android:text="Delete nSelected"
        android:textColor="#7b818b"
        android:textSize="14sp" />
</LinearLayout>
 

а вот мой селектор xml

 <?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/login_edittext" android:state_selected="true"></item>
<item android:drawable="@drawable/btn_accept_normal" android:state_pressed="true</item>
<item android:drawable="@drawable/btn_accept_hover"></item>

 </selector>
 

я хочу изменить цвет фона после нажатия кнопки и сохранять его таким образом до тех пор, пока не будет нажата другая кнопка

Комментарии:

1. опубликуйте фактический код, чтобы изменить текст и цвет того, что вы пробовали..

2. Я думаю, вы должны сделать это в коде с помощью setclickListener для кнопки

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

4. есть ли какой-нибудь способ сделать это с помощью selector, потому что мне нужно, чтобы это было реализовано в большинстве мест

5. вы можете создать один метод, который обрабатывает это во всех классах, которые вы хотите, получить один массив представления в качестве параметра, и один индекс для позиции ведьмы должен быть изменен, затем установить фон или что угодно для представлений

Ответ №1:

Попробуйте, как предложил Devil Abhi, а также добавьте некоторый код, который вам нужен, чтобы изменить цвет и текст определенной кнопки при нажатии и снова вернуться к нормальному состоянию при нажатии другой кнопки.

 @Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    switch(v.getId()){

    case R.id.button1:
        b1.setBackgroundColor(Color.RED);
        b1.setTextColor(Color.WHITE); 
        b1.setTypeface(null, Typeface.BOLD);
        b2.setBackgroundColor(*default background color*);
        b3.setBackgroundColor(*default background color*);
        break;

    case R.id.button2:
        b2.setBackgroundColor(Color.GREEN); 
        b2.setTextColor(Color.WHITE);
        b2.setTypeface(null, Typeface.BOLD);
        b1.setBackgroundColor(*default background color*);
        b3.setBackgroundColor(*default background color*);
        break;

    case R.id.button3:
        b3.setBackgroundColor(Color.BLUE);
        b3.setTextColor(Color.WHITE);
        b3.setTypeface(null, Typeface.BOLD);
        b1.setBackgroundColor(*default background color*);
        b2.setBackgroundColor(*default background color*);
        break;

    }
 

Комментарии:

1. как я могу изменить стиль текста??

2. @ Стиль текста кнопки??

3. под этим я хочу сказать, что я хочу сделать текст кнопки жирным шрифтом при ее нажатии

4. просто добавьте это b1.setTypeface(null, Typeface.BOLD); внутри события щелчка для кнопки.

5. @Dude посмотрите отредактированный ответ, чтобы выделить текст кнопки жирным шрифтом при ее нажатии.

Ответ №2:

Вам нужно использовать RadioButtons или ToggleButton вместо кнопки. В вашем селекторе вам необходимо определить фон для state_checked и контролировать ваше состояние в вашем коде (для кнопки переключения, не обязательно для переключателя внутри RadioGroup).

Я предлагаю использовать кнопку переключения и установить флажок false при нажатии на другую кнопку.

Ответ №3:

Попробуйте это…

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" 
    android:id="@ id/relative1">

    <Button
        android:id="@ id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="49dp"
        android:layout_marginTop="39dp"
        android:text="Red" />

    <Button
        android:id="@ id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@ id/button1"
        android:layout_below="@ id/button1"
        android:layout_marginTop="34dp"
        android:text="Green" />

    <Button
        android:id="@ id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@ id/button2"
        android:layout_centerVertical="true"
        android:text="Blue" />

</RelativeLayout>
 

 package com.example.backgroundcolor;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RelativeLayout;

public class MainActivity extends Activity implements OnClickListener {

    RelativeLayout rl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rl = (RelativeLayout)findViewById(R.id.relative1);
        Button b1 = (Button)findViewById(R.id.button1);
        Button b2 = (Button)findViewById(R.id.button2);
        Button b3 = (Button)findViewById(R.id.button3);
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
        b3.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(v.getId()){

        case R.id.button1:
            rl.setBackgroundColor(Color.RED);
            break;

        case R.id.button2:
            rl.setBackgroundColor(Color.GREEN);
            break;

        case R.id.button3:
            rl.setBackgroundColor(Color.BLUE);
            break;

        }
    }

}
 

Комментарии:

1. @blackbelt на простой кнопке нажмите на ее настройку фона

2. я не хочу делать это в файле Java, я хочу сделать это через селектор. возможно ли t=это через селектор

3. вы хотите использовать кнопку переключения?

Ответ №4:

Попробуйте этот способ, надеюсь, это поможет вам решить вашу проблему.

radio_button_background_selector.xml

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/darker_gray" android:state_checked="true" android:state_pressed="false"/>
    <item android:drawable="@android:color/white" android:state_checked="false" android:state_pressed="false"/>
    <item android:drawable="@android:color/darker_gray" android:state_checked="true" android:state_pressed="true"/>
    <item android:drawable="@android:color/white" android:state_checked="false" android:state_pressed="true"/>
</selector>
 

radio_button_text_selector.xml

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@android:color/white" android:state_checked="true"></item>
    <item android:color="@android:color/black"></item>
</selector>


<LinearLayout
        android:id="@ id/lineartab"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RadioButton
            android:id="@ id/allMessagesBT"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:gravity="center"
            android:background="@drawable/radio_button_background_selector"
            android:textColor="@drawable/radio_button_text_selector"
            android:text="All nMessages"
            android:textSize="14sp"
            android:checked="true"/>

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginBottom="3dp"
            android:layout_marginTop="3dp"
            android:background="@drawable/line" />

        <RadioButton
            android:id="@ id/createNewBT"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:gravity="center"
            android:background="@drawable/radio_button_background_selector"
            android:textColor="@drawable/radio_button_text_selector"
            android:singleLine="false"
            android:text="Create nNew"
            android:textSize="14sp" />

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_marginBottom="3dp"
            android:layout_marginTop="3dp"
            android:background="@drawable/line" />

        <RadioButton
            android:id="@ id/deleteBT"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:gravity="center"
            android:background="@drawable/radio_button_background_selector"
            android:textColor="@drawable/radio_button_text_selector"
            android:text="Delete nSelected"
            android:textSize="14sp" />
</LinearLayout>