我在RelativeLayout中有ImageButton和TextView。 我想在按下时将颜色更改为蓝色,并在释放时再将其变为白色。无论我点击哪一个,我都需要对它们进行操作。 我想对他们两个激活相同的动作,例如将在屏幕上显示的Toast。
我尝试使用selectors和duplicateParentState以及许多其他选项来完成它。 有人能给我一个如何做的简单例子吗?
更新
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/trash_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/trash_pressed" android:state_focused="true"/>
<item android:drawable="@drawable/trash"/>
</selector>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#33B5E5" />
<item android:state_focused="true" android:color="#33B5E5" />
<item android:color="#ffffff" />
</selector>
这是布局
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scaleType="fitCenter"
android:gravity="center"
android:layout_gravity="center">
<ImageButton
android:id="@+id/button_ResetData"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:layout_weight="1"
android:adjustViewBounds="true"
android:background="@android:color/transparent"
android:clickable="true"
android:duplicateParentState="true"
android:scaleType="fitCenter"
android:src="@drawable/reset_button_selector"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@id/button_ResetData"
android:scaleType="fitCenter"
android:clickable="true"
android:text="@string/Button_ResetData"
android:textSize="10dp"
android:duplicateParentState="true"
android:textColor="@drawable/main_buttons_text_color_selector"/>
</RelativeLayout>
当我单击布局时,文本和按钮的选择器被激活但不是click事件。当我点击按钮时,选择器不起作用,但点击事件有效
答案 0 :(得分:1)
您可以直接将选择器设置为RelativeLayout,并为其实现onClickListener。并确保在RelativeLayout中包含android:clickable="true"
。
答案 1 :(得分:1)
非常简单
在您调用点击功能的活动中...单独定义它们但是像这样使用它们
public class yourclass extends Activity implements OnClickListener
{
ImageButton IMGBTN1;
TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_previousentry);
IMGBTN1 = (ImageButton) findViewById(R.id.imageButton1);
tv1= (TextView) findViewById(R.id.textview1);
IMGBTN1.setOnClickListener(this);
tv1.setOnClickListener(this);
}
public void onClick(View v)
{
if (v == IMGBTN1 )
{
IMGBTN1.setBackgroundColor(Color.BLUE);
tv1.setTextColor(Color.parseColor("#bdbdbd"));
Toast.makeText(getBaseContext(),"img 1 pressed", Toast.LENGTH_LONG).show();
delay();
}
if (v == tv1)
{
IMGBTN1.setBackgroundColor(Color.BLUE);
tv1.setTextColor(Color.parseColor("#bdbdbd"));
Toast.makeText(getBaseContext(),"textview 1 pressed", Toast.LENGTH_LONG).show();
delay();
}
public void delay()
{
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run()
{
IMGBTN1.setBackgroundColor(Color.RED);
tv1.setTextColor(Color.parseColor("#ffffff"));
}
}, 500);
}
}
答案 2 :(得分:0)
使用yourView.performClick()
以编程方式单击按钮。
答案 3 :(得分:0)
你可以试试这个,
将选择器添加到Textview和image drawable。使用xml中的drawableLeft,drawableTop等属性将该图像添加到textview。 如果有效,请告诉我。
答案 4 :(得分:-1)
找到解决方案:
final ImageButton resetButton = (ImageButton) findViewById(R.id.button_ResetData);
final TextView resetButton_Title = (TextView) findViewById(R.id.textview_button_ResetData_title);
View.OnTouchListener onTouchListener_ResetButton = new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()){
case MotionEvent.ACTION_DOWN:
resetButton.setImageResource(R.drawable.trash_pressed);
resetButton_Title.setTextColor(getResources().getColor(R.color.Blue_Light));
break;
case MotionEvent.ACTION_UP:
resetButton.setImageResource(R.drawable.trash);
resetButton_Title.setTextColor(Color.WHITE);
AlertDialog.Builder builder = new Builder(MainActivity.this);
builder.setMessage("Are you sure you want to clear the list (except \"In progress\")?")
.setPositiveButton("Yes", resetListDialogClickListener)
.setNegativeButton("No", resetListDialogClickListener);
AlertDialog dialog = builder.show();
TextView messageView = (TextView) dialog.findViewById(android.R.id.message);
messageView.setGravity(Gravity.CENTER);
}
return false;
}
};
resetButton.setOnTouchListener(onTouchListener_ResetButton);
resetButton_Title.setOnTouchListener(onTouchListener_ResetButton);