![](/img/trans.png)
[英]Android ListView selector change background image and text color at the same time
[英]Change background and text color of the button at the same time
我想在按下按鈕時更改按鈕背景及其文本顏色。
請檢查我的以下項目,並給我您的建議...
這是我的MainActivity.java
package com.example.dynamicbutton;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout myLayout = (LinearLayout) findViewById(R.id.layout);
myLayout.setPadding(0, 10, 0, 30);
Button[] btn = new Button[5];
for(int i=0; i<5; i++)
{
btn[i] = new Button(this);
btn[i].setId(i);
btn[i].setText("Dynamic Button" + i);
btn[i].setPadding(5, 5, 5, 5);
btn[i].setTextSize(15);
if (i % 2 == 0)
{
btn[i].setBackgroundResource(R.drawable.bluebutton_background);
btn[i].setTextColor(getResources().getColor(R.drawable.blue_text_color));
}
else{
btn[i].setBackgroundResource(R.drawable.graybutton_background);
btn[i].setTextColor(getResources().getColor(R.drawable.gray_text_color));
}
myLayout.addView(btn[i]);
}
}
@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;
}
}
和activity_main.xml (布局)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context=".MainActivity" >
<LinearLayout
android:id="@+id/layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#FFFFFF"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
和繪畫:
bluebutton_background.xml
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:state_focused="true"
android:drawable="@drawable/orangebutton"
/>
<item
android:state_pressed="true"
android:drawable="@drawable/orangebutton"
/>
<item android:drawable="@drawable/bluebutton"/>
</selector>
graybutton_background.xml
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_focused="true" android:drawable="@drawable/orangebutton"/>
<item android:state_pressed="true" android:drawable="@drawable/orangebutton"/>
<item android:drawable="@drawable/graybutton"/>
</selector>
gray_text_color.xml
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_focused="true" android:color="#f4f4f4"/>
<item android:state_pressed="true" android:color="#242425"/>
<item android:color="#f4f4f4"/>
</selector>
blue_text_color.xml
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_focused="true" android:color="#242425"/>
<item android:state_pressed="true" android:color="#242425"/>
<item android:color="#242425"/>
</selector>
最好的祝福
您可以使用onClickListener()方法。
請嘗試以下步驟:
將您的按鈕數組聲明為
final Button [] btn = new Button [5];
在for循環中聲明最終的int j
最終整數j = i;
將以下代碼放在for循環的if else部分之后
btn [i] .setOnClickListener(new OnClickListener(){
@Override public void onClick(View v) { // TODO Auto-generated method stub if(btn[j].getTextColors().getDefaultColor() == Color.parseColor("#242425")){ btn[j].setTextColor(getResources().getColor(R.drawable.gray_text_color)); btn[i].setBackgroundResource(R.drawable.graybutton_background); } else { btn[j].setTextColor(getResources().getColor(R.drawable.blue_text_color)); btn[i].setBackgroundResource(R.drawable.bluebutton_background); } } });
最終代碼如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout myLayout = (LinearLayout) findViewById(R.id.layout);
myLayout.setPadding(0, 10, 0, 30);
final Button[] btn = new Button[5]; // 1
for(int i=0; i<5; i++)
{
final int j = i; // 2
btn[i] = new Button(this);
btn[i].setId(i);
btn[i].setText("Dynamic Button" + i);
btn[i].setPadding(5, 5, 5, 5);
btn[i].setTextSize(15);
if (i % 2 == 0)
{
btn[i].setBackgroundResource(R.drawable.bluebutton_background);
btn[i].setTextColor(getResources().getColor(R.drawable.blue_text_color));
}
else{
btn[i].setBackgroundResource(R.drawable.graybutton_background);
btn[i].setTextColor(getResources().getColor(R.drawable.gray_text_color));
}
myLayout.addView(btn[i]);
}
btn[i].setOnClickListener(new OnClickListener() { // 3
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(btn[j].getTextColors().getDefaultColor() == Color.parseColor("#242425")){
btn[j].setTextColor(getResources().getColor(R.drawable.gray_text_color));
btn[i].setBackgroundResource(R.drawable.graybutton_background);
} else {
btn[j].setTextColor(getResources().getColor(R.drawable.blue_text_color));
btn[i].setBackgroundResource(R.drawable.bluebutton_background);
}
}
});
}
我在圖片中解釋了我的意思。
我將需要同時更改background_image和textColor按鈕。
我從選擇器標簽中使用了我的background_image 。
另外,當按下按鈕時,我使用了選擇器標簽來更改按鈕的textColor 。
當我按下按鈕時, background_image發生變化,但是textColor只是默認
.xml文件的值( blue_text_color.xml或gray_text_color.xml )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.