如何在android中一起点击imagebutton和textview?

时间:2014-04-22 09:39:31

标签: android selector imagebutton

我在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事件。当我点击按钮时,选择器不起作用,但点击事件有效

5 个答案:

答案 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);