android:带文字和背景图片的按钮+使透明区域无法点击

时间:2015-08-13 11:01:23

标签: android xml android-studio button imagebutton

如何制作一个背景图像和文字的按钮,同时背景图片的透明区域不可点击?

据我所知,

使用ImageButton:有背景图片(是),透明区域不可点击(是),文字(没有)

使用Button:有背景图片(是),透明区域不可点击(不确定),文字(是)

我怎么能有3'是'一个按钮?

5 个答案:

答案 0 :(得分:0)

你可以尝试一下 在框架布局中添加图像按钮,然后在其上方的textview,这应该可以解决您的问题

答案 1 :(得分:0)

看一件事就是使用自定义布局。将framelayout作为背景,添加居中的textview并使textview可单击并附加一个监听器以处理其click事件

答案 2 :(得分:0)

好的我明白了:使用OnTouchListener()并像ImageButton一样捕捉透明像素,并像往常一样设置文本。

Button btn = (Button) findViewById(R.id.btn6);
    btn.setBackground(getResources().getDrawable(R.drawable.ic_launcher));

    // use setOnTouchListener to make transparent area not clickable
    btn.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {

            // get bitmap
            Bitmap bmp = null;
            v.setDrawingCacheEnabled(true);
            v.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); //Quality of the snapshot(bmp)
            try {
                v.buildDrawingCache(); // UPDATE HERE
                bmp = Bitmap.createBitmap(v.getDrawingCache());
            } finally {
                v.setDrawingCacheEnabled(false);
            }

            // get color of bitmap
            int color = 0;
            try {
                color = bmp.getPixel((int) event.getX(), (int) event.getY());
            } catch (Exception e) {
                e.printStackTrace();
            }

            if (color == Color.TRANSPARENT)
                return false;
            else {

                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        break;
                    case MotionEvent.ACTION_OUTSIDE:
                        break;
                    case MotionEvent.ACTION_CANCEL:
                        break;
                    case MotionEvent.ACTION_MOVE:
                        break;
                    case MotionEvent.ACTION_SCROLL:
                        break;
                    case MotionEvent.ACTION_UP:
                        Toast.makeText(getApplicationContext(), "ACTION UP", Toast.LENGTH_SHORT).show();
                        break;
                    default:
                        break;
                }
                return true;
            }
        }

    });

答案 3 :(得分:0)

尝试这样的事情,

<RelativeLayout
        android:id="@+id/saveDeleteBar"
        android:layout_width="fill_parent"
        android:layout_height="50dp"

        android:background="@color/purple">

        <TextView
            android:id="@+id/txt1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toLeftOf="@+id/imgbtnDrVisitSave"
            android:ellipsize="end"
            android:gravity="left|center_vertical"
            android:paddingLeft="5dp"
            android:singleLine="true"
            android:text=""
            android:textColor="@color/white"
            android:textSize="18dp"
            android:textStyle="normal" />

        <ImageButton
            android:id="@+id/imgbtnDrVisitSave"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:adjustViewBounds="true"
            android:background="@null" //HERE YOU CAN ADD IMAGE
            android:padding="5dp"
            android:scaleType="fitCenter"
            android:src="@drawable/yes_dark" />

    </RelativeLayout>

答案 4 :(得分:0)

我认为@amit vaghela所说的最佳实践是考虑RelativeLayout或LinearLayout,其中包含图像和文本,并使每个部分都可以随意点击或不可用。