我有一个带有一些Button的OnClickListener。所以,当我按下某些按钮时,屏幕底部出现另一个按钮,例如。如果我不点击最后一个按钮,这个必须消失。
问题是:如何知道用户是否点击了按钮或屏幕的其他部分。
如果用户点击了按钮,我可以使用onClick()? 如果用户没有单击该按钮,那么什么功能可以实现该操作?
PD:我尝试使用onUserInteraction()并且无法解决这个问题,因为程序会调用它来点击或不点击按钮。
我的XML代码是:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/paco"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TabHost
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/pepe"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp" >
</RelativeLayout>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="50dp" >
</TabWidget>
</FrameLayout>
</TabHost>
<LinearLayout
android:id="@+id/pedro"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="center"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/layoutCuadricula_anadirRegalo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center" >
<Button
android:id="@+id/btCuadricula_foto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Foto" />
<Button
android:id="@+id/btCuadricula_galeria"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/btCuadricula_foto"
android:text="Galeria" />
<Button
android:id="@+id/btCuadricula_iconos"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/btCuadricula_galeria"
android:text="Iconos" />
</RelativeLayout>
<Button
android:id="@+id/btCuadricula_anadir"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Añadir" />
</LinearLayout>
</FrameLayout>
好吧,当我按下按钮“Añadir”时,RelativeLayout会显示另外3个按钮。如果我的下一步操作没有按下RelativeLayout中的任何一个按钮。
我展示了我的代码:
public class Cuadricula extends TabActivity implements OnClickListener {
private Button btAnadir, btFoto, btGaleria, btIcono;
private AlphaAnimation alpha;
private TranslateAnimation translate;
private RelativeLayout cuadroBotones;
private AnimationSet animationSet;
private LinearLayout pedro;
private FrameLayout pepe, paco;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.cuadricula);
pedro = (LinearLayout) this.findViewById(R.id.pedro);
pepe = (FrameLayout) this.findViewById(R.id.pepe);
paco = (FrameLayout) this.findViewById(R.id.paco);
TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost);
TabSpec primeraPestana = tabHost.newTabSpec("tid1");
TabSpec segundaPestana = tabHost.newTabSpec("tid2");
TabSpec terceraPestana = tabHost.newTabSpec("tid3");
TabSpec cuartaPestana = tabHost.newTabSpec("tid4");
primeraPestana.setIndicator("Timeline").setContent(
new Intent(this, Timeline.class));
segundaPestana.setIndicator("Eventos").setContent(
new Intent(this, Personas.class));
terceraPestana.setIndicator("Perfil").setContent(
new Intent(this, Perfil.class));
cuartaPestana.setIndicator("Top").setContent(
new Intent(this, Top.class));
tabHost.addTab(primeraPestana);
tabHost.addTab(segundaPestana);
tabHost.addTab(terceraPestana);
tabHost.addTab(cuartaPestana);
cuadroBotones = (RelativeLayout) this
.findViewById(R.id.layoutCuadricula_anadir);
cuadroBotones.setVisibility(RelativeLayout.GONE);
btFoto = (Button) this.findViewById(R.id.btCuadricula_foto);
btGaleria = (Button) this.findViewById(R.id.btCuadricula_galeria);
btIcono = (Button) this.findViewById(R.id.btCuadricula_iconos);
btAnadir = (Button) this
.findViewById(R.id.btCuadricula_anadirRegalo);
btFoto.setOnClickListener(this);
btGaleria.setOnClickListener(this);
btIcono.setOnClickListener(this);
btAnadir.setOnClickListener(this);
paco.setOnClickListener(this);
pedro.setOnClickListener(this);
pepe.setOnClickListener(this);
// Transiciones del cuadro de botones
alpha = new AlphaAnimation(0.0f, 1.0f);
alpha.setDuration(1000);
alpha.setFillAfter(true); // Tell it to persist after the animation ends
translate = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0,
Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1,
Animation.RELATIVE_TO_SELF, 0);
translate.setDuration(500);
animationSet = new AnimationSet(true);
animationSet.addAnimation(alpha);
animationSet.addAnimation(translate);
}
public void onResume() {
super.onResume();
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.btCuadricula_anadirRegalo:
cuadroBotones.setVisibility(RelativeLayout.INVISIBLE);
cuadroBotones.startAnimation(animationSet);
botonesDesplegados = true;
break;
case R.id.btCuadricula_foto:
break;
case R.id.btCuadricula_galeria:
break;
case R.id.btCuadricula_iconos:
break;
case R.id.LinearLayout1:
case R.id.paco:
case R.id.pepe:
case R.id.pedro:
cuadroBotones.setVisibility(RelativeLayout.GONE);
break;
}
}
}
答案 0 :(得分:0)
您可以在从View派生的任何内容上放置onClickListener,这样您就可以在包含按钮的布局上执行此操作。如果布局中的View没有onClickListener本身或者从onClick返回false,则click事件将保持隧道向下,直到它被布局的onClick捕获。
答案 1 :(得分:0)
您可以在屏幕上添加onclick方法。例如,如果您在相对布局上使用框架视图,并将其保留在其他所有内容之后,您当然可以从框架视图中进行单击。
答案 2 :(得分:0)
您的所有视图都位于线性布局中。您只需为此线性布局添加onClick事件,并在屏幕中的任何位置单击时(其他视图除外),将引发该事件。