android - programacion - ¿Cómo mostrar el menú deslizante en el lanzamiento de la actividad?
manual desarrollo de aplicaciones android pdf (3)
Estoy tratando de usar un excelente menú deslizante de la biblioteca por Jeremy Feinstein.
En mi caso, sería genial si la actividad se inicia con el menú deslizante abierto como
En lugar de menú deslizante cerrado como
He intentado poner toggle()
en la actividad pero no tengo uso.
SlidingSherlockFragmentActivity
Es igual que SlidingFragmentActivity excepto que extiende SherlockFragmentActivity en lugar de FragmentActivity.
BaseActividad
public class BaseActivity extends SlidingSherlockFragmentActivity {
private int mTitleRes;
protected ListFragment mFrag;
public BaseActivity(int titleRes) {
mTitleRes = titleRes;
}
private static final String TAG = "BaseActivity";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(mTitleRes);
// set the Behind View
setBehindContentView(R.layout.menu_frame);
FragmentTransaction t = this.getSupportFragmentManager().beginTransaction();
mFrag = new SampleListFragment();
t.replace(R.id.menu_frame, mFrag);
t.commit();
// customize the SlidingMenu
SlidingMenu sm = getSlidingMenu();
sm.setShadowWidthRes(R.dimen.shadow_width);
sm.setShadowDrawable(R.drawable.shadow);
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);
sm.setFadeDegree(0.35f);
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
sm.setOnOpenListener(new SlidingMenu.OnOpenListener() {
@Override
public void onOpen() {
Log.d(TAG, "onOpen");
}
});
sm.setOnOpenedListener(new SlidingMenu.OnOpenedListener() {
@Override
public void onOpened() {
Log.d(TAG, "onOpened");
}
});
sm.setOnCloseListener(new SlidingMenu.OnCloseListener() {
@Override
public void onClose() {
Log.d(TAG, "onClose");
}
});
sm.setOnClosedListener(new SlidingMenu.OnClosedListener() {
@Override
public void onClosed() {
Log.d(TAG, "onClosed");
}
});
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
toggle();
return true;
}
return super.onOptionsItemSelected(item);
}
}
FlipperCheck
public class FlipperCheck extends BaseActivity {
private ViewFlipper flipper;
private TextView secondaryText;
public FlipperCheck() {
super(R.string.app_name);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setSlidingActionBarEnabled(true);
setContentView(R.layout.main);
flipper = (ViewFlipper) findViewById(R.id.voicerecorder_textflipper);
flipper.startFlipping();
flipper.setInAnimation(AnimationUtils
.loadAnimation(getApplicationContext(), android.R.anim.fade_in));
flipper.setOutAnimation(AnimationUtils
.loadAnimation(getApplicationContext(), android.R.anim.fade_out));
secondaryText = (TextView) findViewById(R.id.voicerecorder_secondarytext);
secondaryText.setText("Why cannot I see u...");
final TextView firstText = (TextView) findViewById(R.id.firsttext);
final TextView secondText = (TextView) findViewById(R.id.secondtext);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
stopFlipper();
flipper.setVisibility(View.INVISIBLE);
secondaryText.setVisibility(View.VISIBLE);
}
});
Button secondButton = (Button) findViewById(R.id.second_button);
secondButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
firstText.setText("Replaying");
secondText.setText("Replaying");
}
});
}
@Override
protected void onStart() {
super.onStart();
toggle();
}
private void stopFlipper() {
flipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() {
public void onAnimationStart(Animation animation) {
}
public void onAnimationRepeat(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
int displayedChild = flipper.getDisplayedChild();
int childCount = flipper.getChildCount();
if (displayedChild == childCount - 1) {
flipper.stopFlipping();
}
}
});
}
}
[Editar 2]
Parece que toggle()
en onStart()
es la activación al abrir y cerrar el menú deslizante antes de que se muestre la actividad.
01-01 19:27:53.780: D/BaseActivity(351): onOpen
01-01 19:27:53.780: D/BaseActivity(351): onOpened
01-01 19:27:53.780: D/BaseActivity(351): onClose
01-01 19:27:53.790: D/BaseActivity(351): onClosed
01-01 19:27:54.241: D/dalvikvm(351): GC_EXTERNAL_ALLOC freed 2725 objects / 223104 bytes in 80ms
01-01 19:27:54.370: D/dalvikvm(351): GC_EXTERNAL_ALLOC freed 290 objects / 12352 bytes in 75ms
01-01 19:27:54.520: I/ActivityManager(59): Displayed activity com.abc.FlipperCheck/.FlipperCheck: 3084 ms (total 3084 ms)
Mi pregunta
Al utilizar el menú deslizante de la biblioteca de Android, ¿cómo iniciar una actividad con el menú deslizante abierto?
Hay una mejor manera de hacer esto sin publicar en el Handler
, si hereda de una de las clases de SlidingActivity
:
@Override
public void onPostCreate(Bundle savedInstanceState) {
if (savedInstanceState == null) {
savedInstanceState = new Bundle();
savedInstanceState.putBoolean("SlidingActivityHelper.open", true);
}
super.onPostCreate(savedInstanceState);
}
Esto funciona porque SlidingActivityHelper
restaura el estado de apertura / cierre del menú desde el estado de la instancia guardada. Si no hay un estado guardado, no hay ningún daño en configurarlo como estado predeterminado .
Puedes usar:
@Override
public void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
toggle();
}
}, 1000);
}
getSlidingMenu().post(new Runnable() {
@Override
public void run() {
getSlidingMenu().showMenu();
}
});
Ponlo en onCreate hizo el truco para mí.