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>
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
mabe bạn có thể sử dụng SlidingDrawer? –
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