安卓滑动面板

5

我正在尝试启动一个应用程序,但我不知道如何做我想要的。

这就是我想要的:

左右红色滑块;主要白色内容

两个红色面板都应能够侧向滑动,如果其中一个(或两个)折叠,则白色面板应扩展并占据该面板空间。 当我在屏幕上有红色面板时,白色面板显示所有内容,不会被任何面板遮挡。

我到目前为止尝试了什么:

我开始尝试使用两个 SlidingDrawer,但白色面板被放在红色面板后面,所以没有成功。 之后,我尝试使用2个 LinearLayouts(红色面板)和1个 RelativeLayout(白色面板),并尝试使用按钮更改布局的宽度(就像上面的图像)。这总是导致我不知道如何解决的问题。

有什么建议吗?

编辑: SlidingDrawer 示例的 xml:

<LinearLayout 
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent" 
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:gravity="bottom" 
android:background="#FFFFFFFF">
<SlidingDrawer 
    android:layout_width="100dip" 
    android:id="@+id/SlidingDrawer" 
    android:handle="@+id/slideHandleButton" 
    android:content="@+id/contentLayout" 

    android:layout_height="fill_parent"
    android:orientation="horizontal">

    <LinearLayout 
        android:layout_width="wrap_content" 
        android:id="@+id/contentLayout" 
        android:orientation="horizontal" 

        android:background="#C0C0C0" 
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Meio"
            android:layout_toRightOf="@+id/buttonEsq" />
    </LinearLayout>
    <Button 
        android:layout_width="30dip" 
        android:layout_height="30dip" 
        android:id="@+id/slideHandleButton" 
        android:background="@drawable/arrowup">        
    </Button>
</SlidingDrawer>
</LinearLayout>

以下是LinearLayout示例的xml代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >

    <RelativeLayout
    android:id="@+id/relativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"                
    android:orientation="horizontal"
    android:layout_toLeftOf="@+id/linearLayout3"
    android:layout_toRightOf="@+id/linearLayout1"
    android:background="#FFFFFFFF">
    <Button
        android:id="@+id/buttonEsq"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"


        android:text="v--" />
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Meio"
        android:layout_toRightOf="@+id/buttonEsq" />

    <Button
        android:id="@+id/buttonDir"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:layout_toRightOf="@+id/textView1"
        android:text="--v" />
</RelativeLayout>
<LinearLayout
    android:id="@+id/linearLayout1"
    android:layout_width="50dip"
    android:layout_height="fill_parent"
    android:layout_alignParentLeft="true"


    android:background="#FFFF0000">
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Esquerda" />
</LinearLayout>



<LinearLayout
    android:id="@+id/linearLayout3"
    android:layout_width="50dip"
    android:layout_height="fill_parent"
    android:layout_alignParentRight="true"



    android:background="#FFF00000">
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Direita" />
</LinearLayout>

</RelativeLayout>

Android代码(注释部分是第一个示例的代码):
public class Main extends Activity {
Button slideHandleButton;
Button slideHandleButtonLeft;
Button slideHandleButtonRight;
SlidingDrawer slidingDrawer;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.mainlayouts);
/*  slideHandleButton = (Button) findViewById(R.id.slideHandleButton);
    slidingDrawer = (SlidingDrawer) findViewById(R.id.SlidingDrawer);

    slidingDrawer.setOnDrawerOpenListener(new OnDrawerOpenListener() {
        @Override
        public void onDrawerOpened() {
            slideHandleButton.setBackgroundResource(R.drawable.arrowdown);
        }
    });

    slidingDrawer.setOnDrawerCloseListener(new OnDrawerCloseListener() {
        @Override
        public void onDrawerClosed() {
            slideHandleButton.setBackgroundResource(R.drawable.arrowup);
        }
    });*/
    slideHandleButtonLeft = (Button) findViewById(R.id.buttonEsq);
    slideHandleButtonLeft.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            LinearLayout lll = (LinearLayout) findViewById(R.id.linearLayout1);
            RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams(50, LinearLayout.LayoutParams.FILL_PARENT);              
            lll.setLayoutParams(params);            
        }
    }); 
}
}

我会发布一些你所尝试过但并没有奏效的方法代码。这样,当别人为你建议方法时,能够从中获得些许启示。 - hooked82
完成,希望有所帮助 :) - Dporem
请尝试此链接:http://androidtrainningcenter.blogspot.in/2013/06/slidingpanelayout-android-making.html - Tofeeq Ahmad
1个回答

1

SlidingDrawer只能从右侧或底部滑入,无法从顶部或左侧滑入。您可以尝试此问题的答案:Android SlidingDrawer from top? 或者您可以尝试重写源代码 http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/SlidingDrawer.java

然而,SlidingDrawer不允许

白色面板显示所有内容而不在任何面板下方

因为它会滑过白色面板

我唯一想到的解决方案是使用一系列的缩放/平移,将左侧或右侧面板移出屏幕并将可见性设置为gone,同时将中心面板沿着删除的任何红色面板的方向扩展出来。

我之前尝试过制作一个类似的原型,使用了这种方法,但缩放动画看起来很糟糕,更不用说 onAnimationEnd 监听器不起作用了,你需要扩展 LinearLayout 并在那里重写 onAnimationEnd 才能使其正常工作。


请检查第一句话,左边提到了两次。您可能在某个时候想表达右边。 - user658042
我能想到的唯一解决方案是使用一系列的缩放/平移,将左侧或右侧面板移出屏幕并将可见性设置为gone,同时在删除任何红色面板的方向上将中心面板向外缩放。我尝试过这个方法,但效果不佳...无论如何,我将向我的老板提出不同的方法,希望他喜欢,否则我就会陷入痛苦之中。无论如何,感谢您的帮助,这似乎是一个难以回答的话题 :) - Dporem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接