在抽屉中心的android SlidingDrawer 中的默认手柄按钮。是否可以将该位置更改为向左或向右..?如果可能的话,我该怎么做,android:gravity="left"
在按钮中不起作用。
7 回答
把你的句柄放在一个RelativeLayout中,并在句柄上设置android:layout_alignParentRight="true"。
例如像这样:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<SlidingDrawer android:id="@+id/drawer"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:handle="@+id/handle"
android:content="@+id/content">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/handle">
<ImageView android:src="@drawable/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true" />
</RelativeLayout>
<LinearLayout
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#aaaa00" android:id="@+id/content">
<ImageView android:src="@drawable/icon"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center">
</ImageView>
</LinearLayout>
</SlidingDrawer>
</FrameLayout>
HenrikS 回答的问题是,在我的情况下,我在相对布局后面有一些视图,当我尝试单击它们时,我意识到相对布局正在拦截这些点击,因为宽度设置为 fill_parent。
为了解决这个问题,我在左侧修改了处理程序视图(ImageView)的布局,希望对您有所帮助。
public class CustomSlidingDrawer extends SlidingDrawer {
public CustomSlidingDrawer(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CustomSlidingDrawer(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
final int height = b - t;
ImageView handle = (ImageView) getHandle();
int childLeft = 0;
int childWidth = handle.getWidth();
int topOffset = 0;
int bottomOffest = 0;
int childHeight = handle.getHeight();
int childTop = this.isOpened()?topOffset:height - childHeight + bottomOffest;
handle.layout(childLeft, childTop , childLeft + childWidth, childTop+childHeight);
}
}
这个想法很简单:根据您想要的对齐方式将手柄的填充设置为正确的值。
在下面的示例中,我从 SlidingDrawer 派生一个类并覆盖 onLayout,如下所示。我的滑动抽屉位于屏幕底部,我希望手柄左对齐而不是居中对齐。
public class ToolDrawer extends SlidingDrawer {
private int m_handleWidth = 0; // original handle width
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
if (x <= m_handleWidth) {
return super.onTouchEvent(event);
}
return false;
}
protected void onLayout (boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
if (changed) {
ImageView iv = (ImageView) getHandle();
iv.setPadding(0, 0, getWidth() - iv.getWidth(), 0);
if (m_handleWidth == 0) {
m_handleWidth = iv.getWidth();
}
}
}
}
就这么简单。
左对齐句柄的更简单解决方案:
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
final View handle = getHandle();
handle.layout(0, handle.getTop(), handle.getWidth(), handle.getBottom());
}
我试过android:paddingBottom="300dp"
了ImageView
,它工作正常,左、右和顶部也一样。但是您必须从中间位置设置填充,这bottom="300dp"
意味着手柄从中间向上移动 300
我已经研究了这个问题 2 天,我意识到你需要使用另一个库。因为,当您使用RelativeLayout 或LinearLayout 时,您只会得到fill_parent 屏幕,当然它会受到触摸的影响(尽管您没有触摸图标)。
所以,我使用 Sileria 库中的 SlidingTray(版本 3.5)http://aniqroid.sileria.com/doc/api/
我找到了 garibay 的解决方案您只需要在滑动抽屉的内容布局上设置 android:clickable="true" 即可。