无法单击SlidingDrawer中的按钮

时间:2012-05-24 04:32:47

标签: android

我有SlidingDrawer的问题。其中的所有按钮都无法点击。

这是我的SlidingDrawer的xml文件:

<?xml version="1.0" encoding="utf-8"?>
<SlidingDrawer xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="110dp"
    android:content="@+id/content"
    android:handle="@+id/handle">

    <Button
        android:id="@+id/handle"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:text="@string/menu" />

    <LinearLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_gravity="center"
        >

        <Button
            android:id="@+id/btn_video"
            style="@style/button_menu_bottom"
            android:drawableTop="@drawable/mnu_video"
            android:text="@string/video" />

        ...
        ...

    </LinearLayout>

</SlidingDrawer>

这是我从SlidingDrawer扩展的java文件

package com.example;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.SlidingDrawer;
import com.example.R;

public class BottomMenuBar extends SlidingDrawer {

    private SlidingDrawer mSlidingDrawer;
    private Button mButtonSlidingDrawer;
    private LinearLayout mLayoutContent;
    private Button mButtonVideo;
    private Button mButtonPhoto;
    private Button mButtonChat;
    private Button mButtonSetting;

    public BottomMenuBar2(Context context, AttributeSet attrs) {
        super(context, attrs);
        String infService = Context.LAYOUT_INFLATER_SERVICE;
        LayoutInflater li;
        li = (LayoutInflater) getContext().getSystemService(infService);
        li.inflate(R.layout.bar_bottom_menu, this, true);
        mSlidingDrawer=(SlidingDrawer)findViewById(R.id.sld_bottom_menu);
        mButtonSlidingDrawer=(Button)findViewById(R.id.handle);
        mLayoutContent=(LinearLayout)findViewById(R.id.content);
        mButtonVideo=(Button)findViewById(R.id.btn_video);
        mButtonSetting=(Button)findViewById(R.id.btn_setting);
    }

    public Button getmButtonSlidingDrawer() {
        return mButtonSlidingDrawer;
    }
    public void setmButtonSlidingDrawer(Button mButtonSlidingDrawer) {
        this.mButtonSlidingDrawer = mButtonSlidingDrawer;
    }

    ...
    Setter & Getter methods
    ...     
}

这是我的main.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg_main"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.1" >

        ...
        Any content
        ...

    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <com.example.BottomMenuBar
            android:id="@+id/sld_bottom_menu"
            android:layout_width="wrap_content"
            android:layout_height="110dp"
            android:handle="@+id/handle"
            android:content="@+id/content"
            />

    </LinearLayout>

</LinearLayout>

2 个答案:

答案 0 :(得分:0)

对于滑动抽屉中的按钮,我告诉每个按钮在xml中使用android:onClick的方法。

        <Button
            android:id="@+id/sortbutton"
            android:layout_width="0dp"
            android:layout_height="35dp"
            android:layout_weight="1"
            android:onClick="SortClickHandler"
            android:text="@string/sd_sortmethod_button"
            android:textSize="12dp" />

然后在任何适当的活动中定义方法:

public void SortClickHandler(View v) {
    //  Do stuff here
}

修改

我想我发现了你的问题。从开发人员文档here开始,我引用了:

SlidingDrawer should be used as an overlay inside layouts. This means SlidingDrawer 
should only be used inside of a FrameLayout or a RelativeLayout for instance.

所以,我认为如果你将你的布局改为RelativeLayout,你会发现你的按钮会起作用。我只是仔细检查了我对滑动抽屉的所有用法,并且在所有情况下,包含它的视图的根元素都是RelativeLayout。

答案 1 :(得分:0)

我不明白为什么要延长SlidingDrawer

您应该查看文档here

<SlidingDrawer
 android:id="@+id/drawer"
 android:layout_width="match_parent"
 android:layout_height="match_parent"

 android:handle="@+id/handle"
 android:content="@+id/content">

 <ImageView
     android:id="@id/handle"
     android:layout_width="88dip"
     android:layout_height="44dip" />

 <FrameView
     android:id="@id/content"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
   [INSERT VIEWS HERE]
 <FrameView>

</SlidingDrawer>

Activity中,您甚至在技术上都不需要访问SlidingDrawer对象(滑动功能已经作为标准配置,它只包含{{1}中的视图},你不需要干涉)。

content增益参考中添加[INSERT VIEWS HERE]。然后,您可以在每个按钮上执行Activity