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