studio - que es vista en android
Vista de Android establecida en Visible y Gone en el mismo método OnClick, Ver nunca muestra Visible (4)
Esos comandos se ejecutan uno tras otro. Entonces, en un sentido técnico, puede ser visible, pero solo durante un milisegundo o dos. Debe distinguir cuándo hacer que la vista sea visible y cuándo ocultarla ...
Dijiste que te gustaría que el TextView "parpadee" en cierto sentido, así que usemos el Handler que es parte de cada Vista para llamar a Runnable. Este Runnable simplemente ocultará el TextView unos momentos más tarde:
1) Configurar una variable de clase:
Runnable hide = new Runnable() {
@Override
public void run() {
textView1.setVisibility(View.GONE);
}
};
2) Llamar al ejecutable en unos momentos:
button1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// make textview visible for 1 second (1000 milliseconds)
textView1.setVisibility(View.VISIBLE);
textView1.postDelayed(hide, 1000);
}
});
(Un controlador y Runnable no bloquea el hilo de UI).
Hola comunidad de stackoverflow,
Estoy usando Android API 14 en un dispositivo con Android 4.0.3.
En la Actividad, he configurado un botón para mostrar una vista de texto en la página mientras se está realizando una acción. Después de realizar la acción, quiero que TextView desaparezca nuevamente.
button1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// make textview visible
textView1.setVisibility(View.VISIBLE);
// perform action
System.out.println("perform action");
// make textview disappear
textView1.setVisibility(View.GONE);
}
});
Si elimino la parte que hace que TextView desaparezca, TextView aparece en la parte superior de la ventana como se esperaba, pero quiero que TextView aparezca durante 1-2 segundos y luego desaparezca.
Al principio me pregunté si necesitaba hacer más trabajo que simplemente realizar una pequeña acción, así que intenté agregar una espera e imprimir el texto, pero nada de eso funcionó. La espera siempre llamaba a la excepción, finalizaba la actividad, y cuando imprimí los números 1-1000, la vista todavía estaba desaparecida.
¿Hay una mejor manera de hacer que un TextView aparezca y desaparezca en una acción OnClick?
¡Gracias por tu ayuda!
Usa una animación
public class MainActivity extends Activity {
TextView txt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b = (Button) findViewById(R.id.btn_animation);
txt = (TextView) findViewById(R.id.textviewtest);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
txt.clearAnimation();
Animation fadeIn = new AlphaAnimation(0, 1);
fadeIn.setInterpolator(new DecelerateInterpolator()); //add this
fadeIn.setDuration(1000);
Animation fadeOut = new AlphaAnimation(1, 0);
fadeOut.setInterpolator(new AccelerateInterpolator()); //and this
fadeOut.setStartOffset(1000);
fadeOut.setDuration(1000);
AnimationSet animation = new AnimationSet(false); //change to false
animation.addAnimation(fadeIn);
animation.addAnimation(fadeOut);
animation.setAnimationListener( new AnimationListener() {
@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
txt.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
txt.setVisibility(View.VISIBLE);
}
});
txt.setAnimation(animation);
}
});
}
activity_main.xml:
<LinearLayout 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" >
<Button
android:id="@+id/btn_animation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Animation" />
<TextView
android:id="@+id/textviewtest"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:text="HelloWorld" />
aquí hay un ejemplo con controlador (¡no lo he compilado!)
Handler handler = new Handler();
button1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// make textview visible
textView1.setVisibility(View.VISIBLE);
// perform action
System.out.println("perform action");
// make textview disappear
handler.postDelayed(new Runnable() {
@Override
public void run() {
textView1.setVisibility(View.GONE);
}} , 2000);
}
});
Debe usar un controlador para ejecutar el bit de código que establece Visibilidad en GONE. Quizás Ejecutar una tarea en un momento específico usando postDelayed podría ser útil.