package yifeiyuan.practice.practicedemos; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.NavigationView; import android.support.design.widget.Snackbar; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import java.util.ArrayList; import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnClick; import yifeiyuan.practice.practicedemos.base.AboutMeActivity; import yifeiyuan.practice.practicedemos.base.Practice; import yifeiyuan.practice.practicedemos.camera.CameraActivity; import yifeiyuan.practice.practicedemos.customview.CanvasActivity; import yifeiyuan.practice.practicedemos.customview.ClipActivity; import yifeiyuan.practice.practicedemos.customview.CustomViewAndGroupActivity; import yifeiyuan.practice.practicedemos.customview.SwitchActivity; import yifeiyuan.practice.practicedemos.fastblur.FastBlurActivity; import yifeiyuan.practice.practicedemos.info.DeviceInfoActivty; import yifeiyuan.practice.practicedemos.intent.IntentActivity; import yifeiyuan.practice.practicedemos.itemtouchhelper.TouchHelperActivity; import yifeiyuan.practice.practicedemos.jni.HelloJni; import yifeiyuan.practice.practicedemos.materialsupport.MaterialActivity; import yifeiyuan.practice.practicedemos.materialsupport.TextInputActivity; import yifeiyuan.practice.practicedemos.periscope.BezierActivity; import yifeiyuan.practice.practicedemos.recyclerview.HorizontalRvActivity; import yifeiyuan.practice.practicedemos.reveal.GoToRevealActivity; import yifeiyuan.practice.practicedemos.screenorientation.OrientationActivity; import yifeiyuan.practice.practicedemos.service.ServiceActivity; import yifeiyuan.practice.practicedemos.surfaceview.GlsurfaceActivity; import yifeiyuan.practice.practicedemos.thirdparty.FacebookActivity; import yifeiyuan.practice.practicedemos.thirdparty.TwitterActivity; import yifeiyuan.practice.practicedemos.touch.TouchActivity; import yifeiyuan.practice.practicedemos.ui.ScrollingActivity; import yifeiyuan.practice.practicedemos.ui.SettingsActivity; import yifeiyuan.practice.practicedemos.ui.UIOneActivity; import yifeiyuan.practice.practicedemos.ui.ViewPagerActivity; import yifeiyuan.practice.practicedemos.viewdrager.SwipeBackActivity; import yifeiyuan.practice.practicedemos.viewdrager.ViewDragerActivity; import yifeiyuan.practice.practicedemos.webview.WebViewActivity; import yifeiyuan.practice.practicedemos.window.FloatingWindowActivity; //// TODO: 15/10/30 http://stackoverflow.com/questions/26440879/how-do-i-use-drawerlayout-to-display-over-the-actionbar-toolbar-and-under-the-st public class MainActivity extends AppCompatActivity { public static final String TAG = "MainActivity"; @InjectView(R.id.nav_view) NavigationView mNavView; @InjectView(R.id.listview) ListView mListView; @InjectView(R.id.drawer) DrawerLayout mDrawer; @InjectView(R.id.toolbar) Toolbar mToolbar; @InjectView(R.id.fab) FloatingActionButton mFab; @InjectView(R.id.coordinator) CoordinatorLayout mCoordinator; private ArrayList<Practice> mPractices; private Context mContext; private MyAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.inject(this); Log.d(TAG, "onCreate: "); mContext = this; initData(); setupListView(); setupToolbar(); setupDrawer(); } private void initData() { mPractices = new ArrayList<>(); mPractices.add(new Practice("ActivityLaunchMode", new Intent(mContext, SwitchActivity.class))); mPractices.add(new Practice("FaceView", new Intent(mContext, SwitchActivity.class))); mPractices.add(new Practice("Camera5.1.1", new Intent(mContext, CameraActivity.class))); mPractices.add(new Practice("Facebook 分享", new Intent(mContext, FacebookActivity.class))); mPractices.add(new Practice("Touch事件分发", new Intent(mContext, TouchActivity.class))); mPractices.add(new Practice("ViewPager 效果 1", new Intent(mContext, ViewPagerActivity.class))); mPractices.add(new Practice("UI效果 one ", new Intent(mContext, UIOneActivity.class))); mPractices.add(new Practice("Material Setting ", new Intent(mContext, SettingsActivity.class))); mPractices.add(new Practice("Material Scrolling ", new Intent(mContext, ScrollingActivity.class))); mPractices.add(new Practice("Service学习 ", new Intent(mContext, ServiceActivity.class))); mPractices.add(new Practice("GLSurfaceView ", new Intent(mContext, GlsurfaceActivity.class))); mPractices.add(new Practice("悬浮窗.", new Intent(mContext, FloatingWindowActivity.class))); mPractices.add(new Practice("自定义ViewAndViewGroup", new Intent(mContext, CustomViewAndGroupActivity.class))); mPractices.add(new Practice("Twitter Login", new Intent(mContext, TwitterActivity.class))); mPractices.add(new Practice("Canvas裁剪", new Intent(mContext, ClipActivity.class))); mPractices.add(new Practice("Canvas基础绘画", new Intent(mContext, CanvasActivity.class))); mPractices.add(new Practice("Periscope点赞效果", new Intent(mContext, BezierActivity.class))); mPractices.add(new Practice("Fastblur", new Intent(mContext, FastBlurActivity.class))); mPractices.add(new Practice("RevealEffect", new Intent(mContext, GoToRevealActivity.class))); // mPractices.add(new Practice("Wave", new Intent(mContext, WaveActivity.class))); mPractices.add(new Practice("ViewDragerHelper之基础", new Intent(mContext, ViewDragerActivity.class))); mPractices.add(new Practice("ViewDragerHelper之SwipeBack", new Intent(mContext, SwipeBackActivity.class))); mPractices.add(new Practice("SwipeDismiss", new Intent(mContext, TouchHelperActivity.class))); mPractices.add(new Practice("横竖屏切换", new Intent(mContext, OrientationActivity.class))); mPractices.add(new Practice("WebView基础", new Intent(mContext, WebViewActivity.class))); mPractices.add(new Practice("Material Support", new Intent(mContext, MaterialActivity.class))); mPractices.add(new Practice("TextInput", new Intent(mContext, TextInputActivity.class))); mPractices.add(new Practice("设备信息", new Intent(mContext, DeviceInfoActivty.class))); mPractices.add(new Practice("Android基础之Intent", new Intent(mContext, IntentActivity.class))); mPractices.add(new Practice("IntentService", new Intent(mContext, ServiceActivity.class))); mPractices.add(new Practice("水平的RecyclerView", new Intent(mContext, HorizontalRvActivity.class))); } @Override protected void onPause() { super.onPause(); Log.d(TAG, "onPause: "); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState);//Notice 如果这个注释 那么就保存不了view的一些状态 比如滚动到了哪里,侧边栏是否打开 Log.d(TAG, "onSaveInstanceState: "); } @Override protected void onStop() { super.onStop(); Log.d(TAG, "onStop: "); } @Override protected void onStart() { super.onStart(); Log.d(TAG, "onStart: "); } @Override protected void onRestart() { super.onRestart(); Log.d(TAG, "onRestart: "); } @Override protected void onResume() { super.onResume(); Log.d(TAG, "onResume: "); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); Log.d(TAG, "onRestoreInstanceState: "); } private void setupListView(){ mAdapter = new MyAdapter(); mListView.setAdapter(mAdapter); mAdapter.notifyDataSetChanged(); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Practice practice = mPractices.get(position); startActivity(practice.intent); } }); } private void setupDrawer(){ mNavView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { menuItem.setChecked(true); //todo mDrawer.closeDrawer(GravityCompat.START); switch (menuItem.getItemId()) { case R.id.github: startActivity(WebViewActivity.start(MainActivity.this, Const.URL_GITHUB)); break; case R.id.jianshu: startActivity(WebViewActivity.start(MainActivity.this, Const.URL_JIANSHU)); break; case R.id.sina: startActivity(WebViewActivity.start(MainActivity.this, Const.URL_SINA)); break; case R.id.menu_about: startActivity(AboutMeActivity.start(MainActivity.this)); break; } return false; } }); ActionBarDrawerToggle mDrawerToggle = new ActionBarDrawerToggle(this, mDrawer, mToolbar, R.string.open_drawer, R.string.close_drawer){ //可以重写一些方法 }; mDrawerToggle.syncState(); mDrawer.setDrawerListener(mDrawerToggle); // mDrawer.setStatusBarBackgroundColor(getResources().getColor(R.color.white)); } private void setupToolbar(){ setSupportActionBar(mToolbar); //似乎没什么用 不设置也没有关系(或许跟ActionBarDrawerToggle 有关) // getSupportActionBar().setHomeButtonEnabled(true); // getSupportActionBar().setDisplayShowHomeEnabled(true);//左上角返回键 设置这个就行 mToolbar.setTitleTextColor(getResources().getColor(R.color.white)); } @OnClick({R.id.fab}) public void onClick(View view) { switch (view.getId()) { case R.id.fab: // Log.d(TAG,Log.getStackTraceString(new Throwable()));//简单暴力 打出堆栈 String jni = HelloJni.helloJni(); Snackbar.make(mFab, jni, Snackbar.LENGTH_SHORT).setAction("TODO", new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(mContext, "TODO", Toast.LENGTH_SHORT).show(); } }).show(); break; } // throw new IllegalArgumentException("Hello crashcatcher"); } private class MyAdapter extends BaseAdapter { @Override public int getCount() { return mPractices.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (null == convertView) { viewHolder = new ViewHolder(); convertView = LayoutInflater.from(mContext).inflate(R.layout.mooc_item, null); viewHolder.title = (TextView) convertView.findViewById(R.id.tv_title); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } Practice mooc = mPractices.get(position); viewHolder.title.setText(mooc.title); return convertView; } class ViewHolder { TextView title; } } }