如何知道用户是否点击了按钮或屏幕的其他部分

时间:2013-01-19 20:28:25

标签: android button click focus

我有一个带有一些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;
    }

}

}

3 个答案:

答案 0 :(得分:0)

您可以在从View派生的任何内容上放置onClickListener,这样您就可以在包含按钮的布局上执行此操作。如果布局中的View没有onClickListener本身或者从onClick返回false,则click事件将保持隧道向下,直到它被布局的onClick捕获。

答案 1 :(得分:0)

您可以在屏幕上添加onclick方法。例如,如果您在相对布局上使用框架视图,并将其保留在其他所有内容之后,您当然可以从框架视图中进行单击。

答案 2 :(得分:0)

您的所有视图都位于线性布局中。您只需为此线性布局添加onClick事件,并在屏幕中的任何位置单击时(其他视图除外),将引发该事件。