J'essaie d'implémenter un tiroir de navigation, mais je continue à avoir cette erreur ... J'ai vu les mêmes questions mais je n'ai pas fonctionné J'ai la mise en page suivante activity_main2.xml:
<Android.support.v4.widget.DrawerLayout
Android:layout_width="match_parent"
Android:id="@+id/drawerLayout"
Android:layout_height="match_parent">
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"/>
<RelativeLayout
Android:layout_gravity="left|start"
Android:layout_width="match_parent"
Android:background="#fff"
Android:layout_height="match_parent">
<ListView
Android:id="@+id/left_drawer"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:divider="#eee"
Android:background="#fff"
Android:dividerHeight="1dp" />
</RelativeLayout>
</Android.support.v4.widget.DrawerLayout>
Sur mon activité_main2.Java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initView();
if (toolbar != null) {
//toolbar.setTitle("");
setSupportActionBar(toolbar);
}
initDrawer();
}
private void initView() {
leftDrawerList = (ListView) findViewById(R.id.left_drawer);
toolbar = (Toolbar) findViewById(R.id.toolbar);
drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
navigationDrawerAdapter = new ArrayAdapter<String>( MainActivity.this, Android.R.layout.simple_list_item_1, leftSliderData);
leftDrawerList.setAdapter(navigationDrawerAdapter);
leftDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(position == 1){
drawerLayout.closeDrawer(Gravity.LEFT);
}
}
});
}
private void initDrawer() {
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
};
drawerLayout.setDrawerListener(drawerToggle);
}
J'espère que quelqu'un m'aidera dans la bonne direction.
Merci d'avance!
Mon DrawerLayout était dans un LinearLayout:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:background="@drawable/abohawawallpapersqr"
tools:context=".MainActivity">
<include layout="@layout/toolbar" />
<Android.support.v4.widget.DrawerLayout
Android:id="@+id/drawerLayout"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<!-- ...... -->
</Android.support.v4.widget.DrawerLayout>
</LinearLayout>
Ensuite, j'ai résolu le problème en modifiant le layout_height="wrap_content"
en layout_height="match_parent"
de LinearLayout
.So le code est:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:background="@drawable/abohawawallpapersqr"
tools:context=".MainActivity">
Pour ceux qui ont encore une exception, assurez-vous que la hauteur de votre DrawerLayout
est match_parent
Cela peut aussi arriver à cause de la nouvelle ConstraintLayout
. Assurez-vous que la disposition des tiroirs ne se trouve pas dans la hiérarchie de ConstraintLayout
.
C'est un bug vraiment stupide de la part d'Android. Je vais essayer de déposer un bogue pour cela.
Assurez-vous que votre activité n'est pas une activité de "dialogue", vérifiez le manifeste. J'ai commis cette erreur et j'ai eu l'erreur.
Cela peut également se produire si vous avez défini layout_width
sur wrap_content
. Dans mon cas, le problème a été résolu en définissant la largeur sur match_parent
. J'espère que ça aide quelqu'un.
requestWindowFeature(Window.FEATURE_NO_TITLE);
mon problème a été résolu en créant l’activité comme ci-dessous;
@Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.mainmenu);
}
utilisez ceci ...
public class CustomDrawerLayout extends DrawerLayout {
public CustomDrawerLayout(Context context) {
super(context);
}
public CustomDrawerLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomDrawerLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
widthMeasureSpec = MeasureSpec.makeMeasureSpec(
MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY);
heightMeasureSpec = MeasureSpec.makeMeasureSpec(
MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
en utilisant Android.Support.V4.Widget; en utilisant Android.Util;
...
class MyDrawerLayout: DrawerLayout
{
public MyDrawerLayout(Context context) : base(context)
{
}
public MyDrawerLayout(Context context, IAttributeSet attrs) : base(context, attrs)
{
}
public MyDrawerLayout(Context context, IAttributeSet attrs, int defStyle) : base(context, attrs, defStyle)
{
}
public MyDrawerLayout(IntPtr context, Android .Runtime.JniHandleOwnership jniHandleOwnership) : base(context, jniHandleOwnership)
{
}
protected override void OnMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
widthMeasureSpec = MeasureSpec.MakeMeasureSpec(MeasureSpec.GetSize(widthMeasureSpec), MeasureSpecMode.Exactly);
heightMeasureSpec = MeasureSpec.MakeMeasureSpec(MeasureSpec.GetSize(heightMeasureSpec), MeasureSpecMode.Exactly);
base.OnMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
Par erreur, j'ai défini un thème de dialogue personnalisé pour l'activité au lieu d'un thème d'activité personnalisé:
activity.setTheme(R.style.StyledDialogTheme);
Après avoir corrigé cela, cela fonctionne à nouveau.
Si vous obtenez toujours cette exception, assurez-vous que votre activité est définie à l'écran Dans Manifeste, vous pouvez le faire dans Activity
:
Android:theme="@style/Theme.AppCompat.Light.FullScreen"
Ou définissez ceci dans styles.xml
:
<style name="Theme.AppCompat.Light.FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="Android:windowNoTitle">false</item>
<item name="Android:windowActionBar">true</item>
<item name="Android:windowFullscreen">true</item>
<item name="Android:windowContentOverlay">@null</item>
</style>