2014-01-26 253 views
1

我在我的應用中以稍微不同的方式實現了導航抽屜。但是抽屜不能平穩地打開或關閉。它滯後於。在Google應用中,導航抽屜非常平滑。我如何實現它?這個問題已經在這裏提出,但它不符合我的需求。請幫忙!平滑關閉導航抽屜

XML

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

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

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Swipe from the left to open the drawer" 
     android:id="@+id/textView" 
     android:layout_gravity="center" /> 
</FrameLayout> 

<LinearLayout 
    android:id="@+id/left_drawer_layout" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:layout_marginLeft="-65dp" 
    android:background="#111" 
    android:orientation="vertical" 
    android:layout_gravity="start" > 

    <EditText 
     android:id="@+id/searchbar" 
     android:layout_width="fill_parent" 
     android:layout_height="40dp" 
     android:textColor="#bfc2d1" 
     android:singleLine="true" 
     android:padding="10dp" 
     android:background="@drawable/search_bar" 
     android:layout_marginLeft="3dp" 
     android:layout_marginRight="3dp" 
     android:imeOptions="flagNoExtractUi" 
     android:hint="Search" > 
    </EditText> 

<RelativeLayout 
    android:id="@+id/empty" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:layout_marginLeft="-65dp" 
    android:background="#111" 
    android:orientation="vertical" 
    android:layout_gravity="start" > 
    <TextView 
     android:id="@+id/empty_text" 
     android:text="@string/notfound" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:textColor="#ffababab" 
     android:textSize="15dp" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="10dp" 
     android:gravity="center"> 
    </TextView> 
    </RelativeLayout> 

    <ListView android:id="@+id/left_drawer" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#111"/> 
</LinearLayout> 

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

的Java

public class MainActivity extends FragmentActivity { 
final String[] data ={"Hydrogen","Helium","Lithium","Beryllium","Boron","Carbon","Nitrogen","Oxygen","Flourine","Noen","Sodium","Magnesium","Aluminium","Silicon","Phosphorous","Sulphur","Chlorine","Argon","Potassium","Calcium","Scandium","Titanium","Vanadium","Chromium","Manganese","Iron","Cobalt","Nickel","Copper","Zinc","Gallium","Germanium","Arsenic","Selenium","Bromine","Krypton","Rubidium","Strontium","Yttrium","Zirconium","Niobium","Molybdenum","Technetium","Ruthenium","Rhodium","Palladium","Silver","Cadmium","Indium","Tin","Antimony","Tellurium", 
     "Iodine","Xenon","Caesium","Barium","Lanthanum","Cerium","Praseodymium","Neodymium","Promethium","Samarium","Europium","gadoliium","Terbium","Dysprosium","Holmium","Erbium","Thulium","Ytterbium","Lutetium","Hafnium","Tantalum","Tungsten","Rhenium","Osmium","Iridium","Platinum","Gold","Mercury","Thallium","Lead","Bismuth","Polonium","Astatine","Radon","Francium","Radium","Actinium","Thorium","Protactinium","Uranium","Neptunium","Plutonium","Americium","Curium","Berkelium","Californium","Einstenium","Fermium","Mendelevium","Nobelium","Lawrencium","Rutherfordium","Dubnium","Seaborgium","Bohrium","Hassium", 
     "Meitnerium","Darmstadtium","Roentgenium","Copernicium","Ununtrium","Ununquadium","Ununpentium","Ununhexium","Ununseptium","Ununoctium"}; 

ArrayAdapter<String> adapter; 

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

    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data); 
    final EditText searchBar = (EditText) findViewById(R.id.searchbar); 
    final DrawerLayout drawer = (DrawerLayout)findViewById(R.id.drawer_layout); 
    final ListView navList = (ListView) findViewById(R.id.left_drawer); 
    final LinearLayout linearLayout = (LinearLayout)findViewById(R.id.left_drawer_layout); 
    navList.setAdapter(adapter); 


    navList.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, final int pos,long id){ 
      drawer.closeDrawer(linearLayout); 
     } 
    }); 

    //filter list view after search instantly 
    searchBar.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
      // When user changed the Text 
      String searchedquery = cs.toString().replaceAll(" ", ""); 
      MainActivity.this.adapter.getFilter().filter(searchedquery); 
     } 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) { 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
     } 
    }); 

    //hide the keyboard after search on touch list view 
    navList.setOnScrollListener(new AbsListView.OnScrollListener() { 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 
      //hide keyboard 
      InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(navList.getWindowToken(), 0); 
     } 

     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     } 
    }); 

    navList.setEmptyView(findViewById(R.id.empty)); 

} 

} 
+0

如果它是混帳,這很可能是因爲你在UI線程上做了一些繁重的計算,因此阻止了視圖的繪製。檢查你的logcat提示「丟棄XXX幀」。 – nhaarman

+0

@Neik它沒有顯示任何關於垂下的幀。 – user3234390

+0

你的navigationdrawer片段在哪裏? – silverFoxA

回答

0

這裏是你可以做,使滑動順暢

  1. 分別創建導航抽屜的佈局
  2. 呼叫從片段

這裏的抽屜是爲了更好的理解

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.v4.widget.DrawerLayout 
    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:id="@+id/custom_drawer_layout"> 

    <fragment 
//this contains the layout of your fragment 
     android:id="@+id/drawer_fragement" 
     android:layout_width="260dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="end" 
     android:name="adress to navigationdrawer class" 
     tools:layout="@layout/drawer_frag 
//this line tells which layout to inflate ontop of the fragment 
     /> 
</android.support.v4.widget.DrawerLayout> 

</LinearLayout> 

現在創建名稱爲drawer_frag一個loyout其中包含要顯示在你的抽屜

所有代碼的代碼

希望它有幫助

+0

在此發佈您的答案 – silverFoxA