package org.aisen.sample.ui.activity; import android.app.AlertDialog; import android.app.Fragment; import android.content.DialogInterface; import android.graphics.Rect; import android.os.Build; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.view.Gravity; import android.view.View; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.TextView; import com.example.aisensample.R; import org.aisen.sample.support.bean.MenuBean; import org.aisen.sample.support.utils.SystemBarUtils; import org.aisen.sample.ui.fragment.BaseFragmentSample; import org.aisen.wen.support.utils.SystemUtils; import org.aisen.wen.ui.activity.BaseActivity; import org.aisen.wen.ui.widget.FitWindowsFrameLayout; import butterknife.BindView; /** * Created by wangdan on 15/4/23. */ public class MainActivity extends BaseActivity { @BindView(R.id.drawer) DrawerLayout mDrawerLayout; @BindView(R.id.layMainContent) FitWindowsFrameLayout mainContent; @BindView(R.id.layMainRoot) FitWindowsFrameLayout mainRoot; private ActionBarDrawerToggle mDrawerToggle; // private MenuFragment menuFragment; @Override public void onCreate(Bundle savedInstanceState) { SystemBarUtils.setStatusBar(this); super.onCreate(savedInstanceState); setContentView(R.layout.ui_main); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(false); mainRoot.setOnFitSystemWindowsListener(new FitWindowsFrameLayout.OnFitSystemWindowsListener() { @Override public void onFitSystemWindows(Rect insets) { mainContent.setFitWindowns(insets); } }); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, getToolbar(), R.string.draw_open, R.string.draw_close) { public void onDrawerClosed(View view) { super.onDrawerClosed(view); } public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); // menuFragment = MenuFragment.newInstance(); // getFragmentManager().beginTransaction().add(R.id.menu_frame, menuFragment, "MenuFragment").commit(); if (savedInstanceState == null) onMenuSelected(new MenuBean(0, R.string.a_base_fragment, R.string.a_base_fragment, "0")); } public void onMenuSelected(MenuBean bean) { Fragment fragment = null; switch (Integer.parseInt(bean.getType())) { case 0: fragment = BaseFragmentSample.newInstance(); break; } closeDrawer(); getSupportActionBar().setTitle(bean.getTitleRes()); getFragmentManager().beginTransaction().replace(R.id.content_frame, fragment, "Main").commit(); View toolbarSpinner = getToolbar().findViewById(R.id.toolbarSpinner); if (fragment instanceof MainSpinnerNavigation) { final MainSpinnerNavigation navigation = (MainSpinnerNavigation) fragment; toolbarSpinner.setVisibility(View.VISIBLE); TextView txtTitle = (TextView) toolbarSpinner.findViewById(R.id.txtTitle); txtTitle.setText(navigation.generateItems()[0]); toolbarSpinner.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showSpinnerDialog(MainActivity.this, navigation, v); } }); getSupportActionBar().setTitle(""); } else { toolbarSpinner.setVisibility(View.GONE); } } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); if (mDrawerToggle != null) mDrawerToggle.syncState(); } public void closeDrawer() { mDrawerLayout.closeDrawers(); } public static void showSpinnerDialog(final BaseActivity activity, final MainSpinnerNavigation navigation, View targetView) { String[] items = navigation.generateItems(); Rect rect = new Rect(); targetView.getGlobalVisibleRect(rect); AlertDialog menuDialog = new AlertDialog.Builder(activity, R.style.main_overflow_menus).setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { navigation.onItemSelected(null, null, which, which); } }).create(); menuDialog.show(); if (Build.VERSION.SDK_INT < 21) { menuDialog.getListView().setSelector(R.drawable.abc_item_background_holo_light); menuDialog.getListView().setDivider(null); } menuDialog.getListView().setSelection(navigation.initPosition()); WindowManager.LayoutParams params = menuDialog.getWindow().getAttributes(); params.x = rect.left - Math.round(activity.getResources().getDimensionPixelSize(R.dimen.abc_action_bar_icon_vertical_padding_material) * 1.2f); params.y = rect.bottom - Math.round(activity.getResources().getDimensionPixelSize(R.dimen.abc_action_bar_icon_vertical_padding_material) * 0.8f); params.width = Math.round(targetView.getWidth() * 1.3f); menuDialog.setCanceledOnTouchOutside(true); menuDialog.getWindow().setGravity(Gravity.LEFT | Gravity.TOP); if (items.length > 5) { menuDialog.getWindow().setLayout(params.width, SystemUtils.getScreenHeight(activity) * 3 / 5); } else { menuDialog.getWindow().setLayout(params.width, WindowManager.LayoutParams.WRAP_CONTENT); } menuDialog.getWindow().setAttributes(params); } public interface MainSpinnerNavigation extends AdapterView.OnItemSelectedListener { String[] generateItems(); int initPosition(); } }