Android:如何单独制作textview以及rightDrawable图标

时间:2014-04-24 09:13:22

标签: android

我正在开发一个Android应用程序,我有一些Textview onClick显示一些统计信息,但我在Textview上也有一个图标,我需要制作这些图标也可以点击显示其他一些统计信息,有没有办法做到这一点,以便一个Textview有两个onClickListeners()分别表现,如下图中的图片可以点击textview.setOnClickListener()但需要使图标也可以点击其他功能。

enter image description here

先谢谢

7 个答案:

答案 0 :(得分:0)

如果在单击时需要执行其他操作而不是TextView,则需要将drawable移动到单独的ImageView

答案 1 :(得分:0)

没有直接的方法来实现它。您必须在TextView和

上设置setOnTouchListener
setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

答案 2 :(得分:0)

将textview和Imageview嵌入水平LinearLayout中。您可以为其指定背景,使其看起来像一个单独的字段。 使用每个视图的onClick方法,您可以显示您想要的任何统计信息。

答案 3 :(得分:0)

如果要为textview和drawble项目实现两个单击侦听器,则可以转到自定义视图。请参阅此SO thread以实现可绘制项的clicklistener。

答案 4 :(得分:0)

尝试以下代码: -

<强> CustomEditText.java

public class CustomEditText extends EditText
{
  private Drawable dRight;
  private Rect rBounds;

  public CustomEditText(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }
  public CustomEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
  }
  public CustomEditText(Context context) {
    super(context);
  }

  @Override
  public void setCompoundDrawables(Drawable left, Drawable top,
      Drawable right, Drawable bottom)
  {
    if(right !=null)
    {
      dRight = right;
    }
    super.setCompoundDrawables(left, top, right, bottom);
  }

  @Override
  public boolean onTouchEvent(MotionEvent event)
  {

    if(event.getAction() == MotionEvent.ACTION_UP && dRight!=null)
    {
      rBounds = dRight.getBounds();
      final int x = (int)event.getX();
      final int y = (int)event.getY();
      //System.out.println("x:/y: "+x+"/"+y);
      //System.out.println("bounds: "+bounds.left+"/"+bounds.right+"/"+bounds.top+"/"+bounds.bottom);
      //check to make sure the touch event was within the bounds of the drawable
      if(x>=(this.getRight()-rBounds.width()) && x<=(this.getRight()-this.getPaddingRight())
          && y>=this.getPaddingTop() && y<=(this.getHeight()-this.getPaddingBottom()))
      {
        //System.out.println("touch");
        this.setText("");
        event.setAction(MotionEvent.ACTION_CANCEL);//use this to prevent the keyboard from coming up
      }
    }
    return super.onTouchEvent(event);
  }

  @Override
  protected void finalize() throws Throwable
  {
    dRight = null;
    rBounds = null;
    super.finalize();
  }
}

<强> XML

<com.example.CustomEditText
    android:id="@+id/txtsearch"
    …
    android:layout_gravity="center_vertical"
    android:background="@layout/shape"
    android:hint="Enter place,city,state"
    android:drawableRight="@drawable/cross" 
/>

<强>活性

CustomEditText et = (CustomEditText) this.findViewById(R.id.txtsearch);

请参阅以下链接了解更多

Handling click events on a drawable within an EditText

Setting onClickListner for the Drawable right of an EditText

答案 5 :(得分:0)

来自我的项目 - 示例

<RelativeLayout
        android:id="@+id/beam_contact_entry_contact"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/beam_contact_entry_invite"
        android:background="?entry_background" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:orientation="vertical"
            android:layout_toRightOf="@+id/contact_info_avatar" >

            <TextView
                android:id="@+id/beam_contact_fragment_entry_text"
                style="?primary_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Alexander Great"
                android:textSize="18sp" />

            <TextView
                android:id="@+id/beam_contact_fragment_entry_text_number"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="-4dp"
                android:text="mobile"
                android:visibility="gone"
                style="?secondary_text"
                android:textSize="15sp" />


        </LinearLayout>

    </RelativeLayout>

    <LinearLayout
        android:id="@+id/beam_contact_entry_invite"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/beam_contact_entry_contact"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/beam_contact_entry_contact"
        android:background="?entry_background"
        android:orientation="horizontal" >   

        <ImageView
            android:id="@+id/beam_contact_fragment_entry_right_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="?entry_background"
            android:duplicateParentState="true"
            android:src="@drawable/sv_svyaznoy_contact" />

    </LinearLayout>

答案 6 :(得分:0)

实际上你不需要扩展任何类。假设我有EditText editComment drawableRight

editComment.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            final int DRAWABLE_LEFT = 0;
            final int DRAWABLE_TOP = 1;
            final int DRAWABLE_RIGHT = 2;
            final int DRAWABLE_BOTTOM = 3;

            if(event.getAction() == MotionEvent.ACTION_UP) {
                if(event.getX() >= (editComment.getRight() - editComment.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) {
                    // your action here
                }
            }
            return false;
        }
    });