0

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 文件

包 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>
4

2 回答 2

0

我不明白你为什么要扩展SlidingDrawer

您应该在此处查找文档。

<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对象(滑动功能已经作为标准配置,它只包含视图的 in content,您不需要干预)。

从您Activity获得的对视图的参考,您可以在 [INSERT VIEWS HERE] 中添加。然后,您可以setOnClickListener()对这些按钮中的每一个进行操作。

于 2012-05-24T09:03:25.433 回答
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
}

编辑

我想我找到了你的问题。从这里的开发人员文档中它说,我引用:

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,您会发现您的按钮可以正常工作。我只是仔细检查了滑动抽屉的所有用途,并且在所有情况下,包含它的视图的根元素都是相对布局。

于 2012-05-24T04:44:47.777 回答