0

Когда я нажимаю на определенную кнопку, цвет фона кнопки, возможно, изменится, в то время как остальные кнопки остаются в своем цвете по умолчанию. Однако при запуске приложения кнопка не меняет свой цвет, хотя остальная часть логики в коде работает хорошо. Я все еще не могу понять, что случилось. Любая помощь будет оценена. Благодарю.Кнопка Android не меняет цвет при нажатии

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.timer_test); 

    adult = (Button) findViewById(R.id.btnAdult); 
    peer = (Button) findViewById(R.id.btnPeer); 
    material = (Button) findViewById(R.id.btnMaterial); 
    physical = (Button) findViewById(R.id.btnPhysical); 


    //Set button disabled, when new activity is turned on 

    flag.setEnabled(false); 
    alarm = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 

    ... 

OnClickListener codes : 

if (textDemo.getText().toString() == "Record") { 
View.OnClickListener listener = new View.OnClickListener() { 
@Override 
    public void onClick(View v) { 

    if (v.equals(physical)) { 
       // do something 
       physical.setText("PHYSICAL ON CLICK WORKS"); 
       physicalPrompt = "Yes"; 
       physical.setBackgroundColor(getResources().getColor(R.color.buttonPressed)); 
       adult.setBackgroundResource(R.drawable.button_selector); 
       peer.setBackgroundResource(R.drawable.button_selector); 
       material.setBackgroundResource(R.drawable.button_selector); 
} 

    else if (v.equals(material)) { 
       // do something 
       material.setText("MATERIAL ON CLICK WORKS"); 
       materials = "Yes"; 
       material.setBackgroundColor(getResources().getColor(R.color.buttonPressed)); 
       peer.setBackgroundResource(R.drawable.button_selector); 
       adult.setBackgroundResource(R.drawable.button_selector); 
       physical.setBackgroundResource(R.drawable.button_selector); 
    } 

    else if (v.equals(peer)){ 
       peer.setText("PEER ON CLICK WORKS"); 
       peers = "Yes"; 
       peer.setBackgroundColor(getResources().getColor(R.color.buttonPressed)); 
       physical.setBackgroundResource(R.drawable.button_selector); 
       adult.setBackgroundResource(R.drawable.button_selector); 
       material.setBackgroundResource(R.drawable.button_selector); 

} 

    else if (v.equals(adult)){ 
       adult.setText("ADULT ON CLICK WORKS"); 
       peers = "Yes"; 
       peer.setBackgroundColor(getResources().getColor(R.color.buttonPressed)); 
       physical.setBackgroundResource(R.drawable.button_selector); 
       adult.setBackgroundResource(R.drawable.button_selector); 
       material.setBackgroundResource(R.drawable.button_selector); 

} 

    else { 
       // do something else 
       textDemo.setText("Error!"); 
     } 
    } 
    }; 

    physical.setOnClickListener(listener); 
    material.setOnClickListener(listener); 
    peer.setOnClickListener(listener); 
    adult.setOnClickListener(listener); 
    } 
    } 
} 

В стоимость/colors.xml,

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

<color name="buttonNotPressed">#2196F3</color> 
<color name="buttonPressed">#1976D2</color> 

<!--<color name="colorHighlightFAB">#B6B6B6</color>--> 
<color name="ColorPrimary">#E91E63</color> 

</resources> 

Дополнительные коды:

public class Timer_Test extends ActionBarActivity { 

//Declare widgets 
Button buttonStart, flag, back, timeButton, adult, peer, material, physical; 
TextView timerTextView, tvTest, interval, child, status, id, session, 
passName, tvStartTime, textDemo; 
+0

Возможно, было бы полезно показать немного больше кода; например, когда объявляются и назначаются переменные кнопки. –

+0

Вы попробовали это - button.setBackgroundResource (R.color.your_color) ;? – Varundroid

+0

и попробуйте переместить этот код - 'physical.setOnClickListener (слушатель); материал.setOnClickListener (слушатель); peer.setOnClickListener (слушатель); adult.setOnClickListener (слушатель); 'к вашему методу onCreate(). – Varundroid

ответ

0

Попробуйте это решение первой и дайте мне знать, если его работа -

private View.OnClickListener mFirstListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     v.setBackgroundResource(R.color.red); 
     ((Button)v).setText("New Text"); 
    } 
}; 

private View.OnClickListener mSecondListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     v.setBackgroundResource(R.color.blue); 
     ((Button)v).setText("New Text"); 
    } 
}; 

private View.OnClickListener mThirdListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     v.setBackgroundResource(R.color.green); 
     ((Button)v).setText("New Text"); 
    } 
}; 

private View.OnClickListener mFourthListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     v.setBackgroundResource(R.color.light_blue); 
     ((Button)v).setText("New Text"); 
    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button button1 = (Button) findViewById(R.id.button); 
    Button button2 = (Button) findViewById(R.id.button2); 
    Button button3 = (Button) findViewById(R.id.button3); 
    Button button4 = (Button) findViewById(R.id.button4); 

    button1.setOnClickListener(mFirstListener); 
    button2.setOnClickListener(mSecondListener); 
    button3.setOnClickListener(mThirdListener); 
    button4.setOnClickListener(mFourthListener); 
} 

Рекомендуемый способ (с использованием XML только) -

Создайте файл внутри вашей рисуемых папку под названием button_states и положить следующий код:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@color/buttonPressed" /> <!--Pressed State--> 
    <item android:state_focused="true" android:drawable="@color/buttonPressed" /> <!--Focused State--> 
    <item android:drawable="@color/grey" /> <!--Normal State--> 
</selector> 

Теперь в вашем xml задайте фон кнопки, как это -

<Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Button" 
     android:id="@+id/button" 
     android:padding="10dp" 
     **android:background="@drawable/button_states"** 
     android:layout_below="@+id/textView" 
     android:layout_toEndOf="@+id/textView" 
     android:layout_marginStart="42dp"/> 

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

Если вы используете рекомендованный способ избавиться от этой строки от всех слушателей - v.setBackgroundResource(R.color.blue);, но для изменения текста вам все равно необходимо сохранить следующую строку: ((Button)v).setText("New Text");.

Надеюсь, это поможет.

+0

Если вы используете рекомендованный способ избавиться от этой строки от всех слушателей - 'v.setBackgroundResource (R.color.blue);' но для изменения текста вам все равно нужно сохранить следующую строку '((Button) v) .setText («Новый текст»); ' – Varundroid

+0

Удалось решить проблему. Большое спасибо. – Enovyne

-1

Кнопки являются более сложными, чем просто изменить один цвет ...

Android кнопки сделанные с использованием довольно много 9-патчей и штатных чертежей. Просто попытка установить фоновый цвет может не сбрасывать ранее установленные стили ресурсов. Попробуйте создать другой ресурс, который можно использовать, с измененным цветом фона и назначив его кнопке.

+0

Но если вы посмотрите на вопрос, с которым вы связались, вы увидите, что ОП этого вопроса задает нечто совершенно иное. –

0

Шахта не работает, потому что у меня был exitFadeDuration и enterFadeDuration набор:

<selector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:exitFadeDuration="40" 
    android:enterFadeDuration="120"> 

После его удаления, все было хорошо!