2016-07-25 8 views
0

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

Заранее спасибо.

Вот мой XML:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer_layout" 
    android:layout_width="400dp" 
    android:layout_height="400dp" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools"> 

     <FrameLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/content_frame" > 
     </FrameLayout> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      tools:context=".Menu"> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:gravity="center_vertical" 
       android:paddingLeft="16dp" 
       android:paddingRight="16dp" 
       android:textColor="#fff" 
       android:text="test" 
       android:id="@+id/text" /> 

     </RelativeLayout> 

     <ListView 
      android:layout_width="200dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="end" 
      android:choiceMode="singleChoice" 
      android:background="#fff" 
      android:id="@+id/left_drawer" > 
     </ListView> 

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

Вот мой Menu.java:

>public class Menu extends AppCompatActivity { 
> 
> public DrawerLayout dlayout; 
> public ListView flist; 
> public String[] menu; 
> //public ArrayAdapter<String> mAdapter; 
> 
> @Override 
> protected void onCreate(Bundle savedInstanceState) { 
>  super.onCreate(savedInstanceState); 
>  setContentView(R.layout.activity_menu); 
> 
>  menu = getResources().getStringArray(R.array.nav_drawer_items); 
>  dlayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
>  flist = (ListView) findViewById(R.id.left_drawer); 
> 
>  flist.setAdapter(new ArrayAdapter<String>(this, R.layout.activity_menu, >R.id.text, menu)); 
> } 
>} 

Я не вижу никакого выхода. Screen output

+0

вы должны создать значок меню в верхнем левом углу. вы должны ввести код для значка, который, когда вы нажмете на этот значок, откроет/закрывает ящик. –

+0

Спасибо Daryl. Я в процессе реализации вашего предложения. – DK15

ответ

0
<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<include 
    android:id="@+id/header" 
    layout="@layout/menu"/> 

<FrameLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:id="@+id/frame" 
     android:textSize="24sp" 
     android:gravity="center" 
     android:layout_marginTop="50dp"/> 

<ListView 
    android:id="@+id/list_item" 
    android:layout_width="200dp" 
    android:layout_height="match_parent" 
    android:dividerHeight="1dp" 
    android:layout_gravity="left|start" 
    android:background="#ffeeeeee"/></android.support.v4.widget.DrawerLayout> 

MainActivity.Java

public class MainActivity extends Activity { 

String[] names = {"android","java","spring","html"}; 
ListView list; 
FrameLayout frame; 
ActionBarDrawerToggle action; 
DrawerLayout drawer; 
Button but; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    frame = (FrameLayout) findViewById(R.id.frame); 
    list = (ListView) findViewById(R.id.list_item); 
    but = (Button) findViewById(R.id.menu); 

    ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, names); 
    list.setAdapter(adapter); 

    action = new ActionBarDrawerToggle(this, drawer, R.string.drawer_open, R.string.drawer_close) { 

     /* Called when drawer is closed */ 
     public void onDrawerClosed(View view) { 
      //Put your code here 
     } 

     /* Called when a drawer is opened */ 
     public void onDrawerOpened(View drawerView) { 
      //Put your code here 
     } 
    }; 
    drawer.setDrawerListener(action); 

    but.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (drawer != null) { 
       if (drawer.isDrawerOpen(list)) { 
        drawer.closeDrawer(list); 
       } else { 
        drawer.openDrawer(list); 
        process(); 
       } 
      } 
     } 
    }); 


} 

private void process() { 

    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      FragmentTransaction ft=getFragmentManager().beginTransaction(); 

      switch (names[position]) 
      { 
       case "android": 
       { 
        yourClass obj=new yourClass(); 
        //ft.replace(R.id.frame,obj); 
        break 
       } 
       case "java": 
       { 
        yourClass obj=new yourClass(); 
        //ft.replace(R.id.frame,obj); 
        break; 
       } 
       case "spring": 
       { 
        yourClass obj=new yourClass(); 
        //ft.replace(R.id.frame,obj); 
        break; 
       } 
       case "html": 
       { 
        yourClass obj=new yourClass(); 
        //ft.replace(R.id.frame,obj); 
        break; 
       } 

       default: 
       { 
        Toast.makeText(MainActivity.this,"you have to click another one",Toast.LENGTH_LONG).show(); 
       } 
      } 
      ft.commitAllowingStateLoss(); 
      list.setItemChecked(position, true); 
      drawer.closeDrawer(list); 
     } 

    }); 
} 

}

menu.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
tools:context=".MainActivity" 
android:layout_height="wrap_content"> 

<Button 
    android:id="@+id/menu" 
    android:title="menu" 
    android:icon="@drawable/menu" 
    android:background="@drawable/menu" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:backgroundTint="#0a0a0a" /></LinearLayout> 
0

Вам необходимо переключить открывание/закрытие ящика. Чтобы сделать это, вы можете сделать следующее:

1 - Реализуйте метод toggleDrawer

public void toggleDrawer(boolean shouldBeVisible){ 
    if(shouldBeVisible){ 
     dlayout.openDrawer(dlayout); 
    } else { 
     dlayout.closeDrawers(); 
    } 
} 

2 - Вызовите его на OnCreate (примечание: это только для тестирования)

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ... 
    toggleDrawer(View.VISIBLE); 
} 

3 - Как сказал Дэрил, реализуйте кнопку, чтобы вы могли активно переключаться (откройте и закройте ящик до y наша симпатия)

myButton = (Button) findViewById(R.id.myButton); 
myButton.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v){ 
     if(dlayout.getVisiblity() == View.VISIBLE) { 
      // drawer is visible -> close 
      toggleDrawer(false); 
     } else { 
      // drawer is gone/invisible -> open 
      toggleDrawer(true); 
     } 
    } 
}) 

4 - (Убедитесь, что DrawerLayout содержит только 2 дочерние представления)

Чтобы добавить панель навигации, объявить пользовательский интерфейс с объекта DrawerLayout как вид корня вашего макета. Внутри DrawerLayout добавьте одно представление, содержащее основное содержимое экрана (ваш основной формат, когда ящик скрыт), и еще один вид , содержащий содержимое навигационного ящика.

Примечание: Забыл добавить это, но это действительно бесценным ссылка (спасибо @Meet, upvoted)

2

кажется, что должно быть проблемой в вашем файле макета.

Помните, что DrawerLayout позволяет максимально дочерние представления. Есть a посмотреть на this Google Doc.

Это должно быть, как:

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <!-- The main content view --> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
    <!-- The navigation drawer --> 
    <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="#111"/> 
</android.support.v4.widget.DrawerLayout> 
+0

Спасибо @Meet. Это было полезно. – DK15

Смежные вопросы