2013-05-16 20 views
8

Tôi chỉ đang phát xung quanh với DrawerLayout mới được đưa vào thư viện hỗ trợ gần đây. Tôi đã thực hiện một ví dụ đơn giản với nhiều ngăn kéo, trong khi tôi đang sử dụng START và END làm trọng lực, tất cả đều hoạt động như một nét duyên dáng, nhưng khi cố gắng thêm một ngăn kéo có độ đậm đặc TOP hoặc BOTTOM.Android DrawerLayout không thành công khi sử dụng trọng số TOP và BOTTOM

Có thể sử dụng nó cho ngăn kéo trượt từ trên xuống và/hoặc dưới cùng không?

Dưới đây là mã đầy đủ cho hoạt động của tôi và bố cục xml ở trạng thái hoạt động; Nếu tôi cố gắng để thay đổi điều này:

<ListView android:id="@+id/right_drawer" 
        android:layout_width="240dp" 
        android:layout_height="match_parent" 
        android:layout_gravity="end" 
        android:choiceMode="singleChoice" 
        android:divider="@android:color/transparent" 
        android:dividerHeight="0dp" 
        android:background="#007799"/> 

vào này (thay đổi thông báo trong layout_width, layout_height và layout_gravity):

<ListView android:id="@+id/right_drawer" 
        android:layout_width="match_parent" 
        android:layout_height="300dp" 
        android:layout_gravity="bottom" 
        android:choiceMode="singleChoice" 
        android:divider="@android:color/transparent" 
        android:dividerHeight="0dp" 
        android:background="#007799"/> 

và dòng:

this.drawer.openDrawer(GravityCompat.START); 

thông tin này:

this.drawer.openDrawer(Gravity.BOTTOM); 

là khi tôi ge t lỗi sau:

05-16 05:22:33.981 1503-1503/es.luixal.test     E/AndroidRuntime: FATAL EXCEPTION: main 
     java.lang.RuntimeException: Unable to start activity ComponentInfo{es.luixal.test/es.luixal.test.MainActivity}: java.lang.IllegalArgumentException: View android.widget.RelativeLayout{42664c80 V.E..... ......I. 0,0-0,0} is not a sliding drawer 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
     at android.app.ActivityThread.access$600(ActivityThread.java:141) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:5039) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
     at dalvik.system.NativeStart.main(Native Method) 
     Caused by: java.lang.IllegalArgumentException: View android.widget.RelativeLayout{42664c80 V.E..... ......I. 0,0-0,0} is not a sliding drawer 
     at android.support.v4.widget.DrawerLayout.openDrawer(DrawerLayout.java:970) 
     at android.support.v4.widget.DrawerLayout.openDrawer(DrawerLayout.java:1003) 
     at es.luixal.test.MainActivity.onCreate(MainActivity.java:30) 
     at android.app.Activity.performCreate(Activity.java:5104) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
     ... 11 more 

Bất kỳ manh mối nào tại sao tôi không thể sử dụng trọng lượng khác này?

Cảm ơn!

MainActivity.java

package es.luixal.test; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.view.Menu; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

public class MainActivity extends Activity { 

private DrawerLayout drawer; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    // filling list items: 
    ListView listView = (ListView)findViewById(R.id.left_drawer); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new String[]{ 
      "MenuItem 1", 
      "MenuItem 2", 
      "MenuItem 3" 
    }); 
    listView.setAdapter(adapter); 
    // 
    this.drawer = (DrawerLayout)findViewById(R.id.drawer_layout); 
    this.drawer.openDrawer(GravityCompat.START); 
} 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 
    } 
} 

activity_main.xml

<RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

     <TextView android:id="@+id/text" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:text="Hi!" 
       /> 
    </RelativeLayout> 

    <ListView android:id="@+id/left_drawer" 
       android:layout_width="240dp" 
       android:layout_height="match_parent" 
       android:layout_gravity="start" 
       android:choiceMode="singleChoice" 
       android:divider="@android:color/transparent" 
       android:dividerHeight="0dp" 
       android:background="#44aa00"/> 

    <ListView android:id="@+id/right_drawer" 
       android:layout_width="240dp" 
       android:layout_height="match_parent" 
       android:layout_gravity="end" 
       android:choiceMode="singleChoice" 
       android:divider="@android:color/transparent" 
       android:dividerHeight="0dp" 
       android:background="#007799"/> 

</android.support.v4.widget.DrawerLayout> 
+0

Tôi đã hỏi @ roman-nurik về điều này trong [g + post] (https://plus.google.com/113735310430199015092/posts/bjiNbjAFsT2) về trình bày DrawerLayout và ông chỉ ra rằng: _ "Không, chắc chắn không có ý định được sử dụng với các trọng lượng dọc" _ vì vậy tôi đoán không có điểm trên cố gắng để có được điều này để làm việc. Bất kỳ lựa chọn thay thế để thực hiện ngăn kéo dọc? – luixal

+0

mabe bạn có thể sử dụng SlidingDrawer? –

+0

Hãy xem https://github.com/Ali-Rezaei/SlidingDrawer giúp bạn có thể trượt từ bất kỳ phía nào bằng vài dòng mã. – Ali

Trả lời

6

Không có tài liệu tham khảo chính thức cho DrawerLayout để sử dụng "dưới" hoặc "Top" Gravity - Source

public void openDrawer (int gravity)

Open the specified drawer by animating it out of view.

Parameters gravity

Gravity.LEFT to move the left drawer or Gravity.RIGHT for the right. GravityCompat.START or GravityCompat.END may also be used.

Nếu bạn muốn sử dụng các hiệu ứng hình ảnh khác - hãy sử dụng thư viện khác

1

Các Menu-Drawer thư viện bởi Simon Vig Therkildsen hoạt động tốt như một tiêu chuẩn trượt ngăn kéo trình đơn mà còn hỗ trợ hàng đầu và ngăn kéo phía dưới. Ứng dụng mẫu của ông có các ví dụ về cách triển khai thực đơn với trọng số TOP/BOTTOM.

11

Chúng tôi vừa thực hiện chức năng này trong App Umano và mở nguồn nó:

https://github.com/umano/AndroidSlidingUpPanel

+0

Có vẻ như điều này chỉ hỗ trợ trượt từ dưới lên, không trượt xuống từ trên cùng như câu hỏi được hỏi. – phreakhead

+0

Đó sẽ là một chỉnh sửa rất đơn giản. Tôi sẽ thêm cái này – tokudu

Các vấn đề liên quan