1

いくつかのボタンを備えた 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」を押すと、別の 3 つのボタンを含む RelativeLayout が表示されます。私の次のアクションがそのボタンのいずれも押さない場合は、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;
    }

}

}
4

3 に答える 3

0

すべてのビューは線形レイアウト内に配置されます。この線形レイアウトにonClickイベントを追加するだけで、画面の任意の場所(他のビューを除く)をクリックすると、イベントが発生します。

于 2013-01-19T23:04:18.130 に答える
0

View から派生したあらゆるものに onClickListener を配置できるため、たとえば、ボタンを含むレイアウトでこれを行うことができます。レイアウト内のビューに onClickListener 自体がない場合、または onClick から false を返す場合、クリック イベントは、レイアウトの onClick によってキャッチされるまでトンネリングを続けます。

于 2013-01-19T20:32:11.240 に答える
0

画面に onclick メソッドを追加できます。たとえば、相対レイアウトでフレームビューを使用し、それを他のすべての背後に置いておくと、フレームビューから確実に onclick を取得できます。

于 2013-01-19T20:35:44.710 に答える