我是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);
但是命中区域并没有增加......我做错了什么?
答案 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);
}
}
});
}
}
现在,如果您注意到我的第二个屏幕截图,我已经增加了底部和顶部的线条布局的间隙,因此这意味着如果您希望这样做,您需要增加按钮周围的布局区域。
总而言之,我对您的代码进行了这些更改,只是为了试验哪些方法有用,以及您应该采取哪些方向来解决问题。希望这会对你有所帮助。
上的帖子转到@Strider