13

在抽屉中心的android SlidingDrawer 中的默认手柄按钮。是否可以将该位置更改为向左或向右..?如果可能的话,我该怎么做,android:gravity="left"在按钮中不起作用。

4

7 回答 7

21

把你的句柄放在一个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>
于 2011-08-02T05:55:21.330 回答
5

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);
}
}
于 2012-06-25T19:38:05.280 回答
1

这个想法很简单:根据您想要的对齐方式将手柄的填充设置为正确的值。

在下面的示例中,我从 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();
            }
        }
    }
}

就这么简单。

于 2012-05-19T18:25:54.930 回答
0

左对齐句柄的更简单解决方案:

@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());
}
于 2013-02-19T11:23:36.930 回答
0

我试过android:paddingBottom="300dp"ImageView,它工作正常,左、右和顶部也一样。但是您必须从中间位置设置填充,这bottom="300dp"意味着手柄从中间向上移动 300

于 2012-01-09T14:50:25.153 回答
0

我已经研究了这个问题 2 天,我意识到你需要使用另一个库。因为,当您使用RelativeLayout 或LinearLayout 时,您只会得到fill_parent 屏幕,当然它会受到触摸的影响(尽管您没有触摸图标)。

所以,我使用 Sileria 库中的 SlidingTray(版本 3.5)http://aniqroid.sileria.com/doc/api/

然后像这样

于 2016-01-26T19:46:39.967 回答
-1

我找到了 garibay 的解决方案您只需要在滑动抽屉的内容布局上设置 android:clickable="true" 即可。

于 2014-07-21T14:03:59.880 回答