Раздвижные панели Android - PullRequest
       6

Раздвижные панели Android

5 голосов
/ 15 ноября 2011

Я пытаюсь запустить приложение и теряюсь в том, как делать то, что хочу.

Это то, что я хочу

left and right red sliders ; main white content

Обе красные панели должны иметь возможность скользить в стороны, а белая должна расширяться, если одна из них (или обе) свернута, занимая это пространство панели. Когда у меня есть красные панели на экране, белая панель показывает весь контент и не находится ни под одной из панелей.

Что я пробовал до сих пор: Я начал с двух SlidingDrawer с, но белая панель оказалась позади красной, так что не повезло. После этого я попытался с 2 LinearLayouts (красные панели) и RelativeLayout (белая панель), и попытался изменить ширину макетов с помощью кнопок (как на изображении сверху). Это всегда вызывало проблемы, которые я не знал, как решить.

Предложения

Edit: xml примера SlidingDrawer:

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

И xml примера LinearLayout:

<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 (закомментированная часть является кодом 1-го примера):

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);            
        }
    }); 
}
}

1 Ответ

1 голос
/ 16 ноября 2011

SlidingDrawer может скользить только справа или снизу, он не может скользить сверху или слева. Вы можете попробовать ответ на этот вопрос: Android SlidingDrawer сверху? или вы можете попробовать переписать исходный код http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/SlidingDrawer.java.

Однако SlidingDrawer не позволяет

белая панель показывает весь контент и не должна быть ни под одной из панелей

как он будет скользить по белой панели

Единственное решение, которое я могу придумать, - это использовать серию масштабирования / перевода, перевести левую или правую панель за пределы экрана и установить видимость исчезнувшей, и в то же время отодвинуть центральную панель в направлении, в зависимости от того, что красная панель удаляется.

Я пытался создать подобный прототип некоторое время назад и использовал этот метод, но анимация масштаба выглядела ужасно, не говоря уже о том, что слушатель onAnimationEnd не работает, вам придется расширить LinearLayout и переопределить onAnimationEnd, чтобы он работа.

...