ImageButton增加了命中区域

时间:2017-11-06 14:14:45

标签: android android-imagebutton

我是Android开发的新手,我需要增加LinearLayout

内分组的两个按钮的点击区域
<LinearLayout
            android:id="@+id/buttonsLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="5sp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="20dp">
            <ImageButton
                android:id="@+id/backButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:background="@drawable/button_close_animation"
                android:onClick="closeActivity"
                android:layout_weight="1"/>
            <ImageButton
                android:id="@+id/sendButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:background="@drawable/sendbutton_inactive"
                android:onClick="onSendMessage"
                android:layout_weight="1"
                android:layout_marginLeft="30sp"/>
        </LinearLayout>

我想增加左侧后退按钮的点击区域和右侧的发送按钮。

我尝试过为每个按钮添加填充,但图像已拉伸,我不想要...我还尝试使用TouchDelegate从后退按钮开始

Rect delegateAreaBack = new Rect();
        ImageButton delegateBack = (ImageButton) findViewById(R.id.backButton);
        delegateBack.getHitRect(delegateAreaBack);
        delegateAreaBack.left -= 2600;
        TouchDelegate expandedAreaBack = new TouchDelegate(delegateAreaBack, delegateBack);
        if(View.class.isInstance(delegateBack.getParent()))
            ((View) delegateBack.getParent()).setTouchDelegate(expandedAreaBack);

但是命中区域并没有增加......我做错了什么?

2 个答案:

答案 0 :(得分:0)

    ImageButton button = (ImageButton) findViewById(R.id.backButton); 
button .post( new Runnable() {
public void run() { 
        final Rect rect = new Rect(); 
        button.getHitRect(rect); 
        rect.top -= 100;    // increase top hit area
        rect.left -= 100;   // increase left hit area
        rect.bottom += 100; // increase bottom hit area           
        rect.right += 100;  // increase right hit area
        button .setTouchDelegate( new TouchDelegate( rect , button)); 
    } 
}); 

答案 1 :(得分:0)

Dana,你似乎需要增加LinearLayout的大小。

以下是它的样子:https://image.prntscr.com/image/mG6IHwS4Tw25kb_6CY5Tqw.png

以下是通过将高度更改为200dp以实验目的,使其看起来像https://image.prntscr.com/image/v8Hl0CrJQ3qwZOQoZMdvLg.png的方式。

所以这里就是如何让你的XML看起来像:

<LinearLayout
        android:id="@+id/buttonsLayout"
        android:layout_width="wrap_content"
        android:layout_height="200dp"
        android:paddingTop="5sp"
        android:layout_marginTop="152dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="114dp"
        android:layout_marginStart="114dp">
        <ImageButton
            android:id="@+id/backButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@mipmap/ic_launcher"
            android:onClick="closeActivity"
            android:layout_weight="1"/>
        <ImageButton
            android:id="@+id/sendButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:background="@mipmap/ic_launcher"
            android:onClick="onSendMessage"
            android:layout_weight="1"
            android:layout_marginLeft="30sp"/>
</LinearLayout>

之后,我使用这个简单的代码对问题进行了一些实验,如果您注意到,发送按钮下方的可点击区域已经增加。

public class MainActivity extends AppCompatActivity {
ImageButton button1, button2;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button1 = (ImageButton) findViewById(R.id.backButton);
    button2 = (ImageButton) findViewById(R.id.sendButton);


    View parent = findViewById(R.id.root); //Your Layout ID
    parent.post(new Runnable() {
        @Override
        public void run() {
            Rect delegateArea = new Rect();
            ImageButton delegate = button2;
            delegate.getHitRect(delegateArea);
            delegateArea.bottom += 260;


            TouchDelegate expandedArea = new TouchDelegate(delegateArea, delegate);
            // give the delegate to an ancestor of the view we're
            // delegating the
            // area to
            if (View.class.isInstance(delegate.getParent())) {
                ((View) delegate.getParent())
                .setTouchDelegate(expandedArea);
            }
        }
    });

}

}

现在,如果您注意到我的第二个屏幕截图,我已经增加了底部和顶部的线条布局的间隙,因此这意味着如果您希望这样做,您需要增加按钮周围的布局区域。

总而言之,我对您的代码进行了这些更改,只是为了试验哪些方法有用,以及您应该采取哪些方向来解决问题。希望这会对你有所帮助。

还可以从Increase the clickable area of the button

上的帖子转到@Strider