Android图像按钮在某些手机上无法点击(Moto g2,Galaxy s2)

5
在我的Android应用程序中,我使用一些图像按钮来滚动ViewFlipper。对于所有片段,我的代码都能完美地工作,但在某些手机上(例如Motorola Moto g2 - Android 4.4.4和Samsung Galaxy s2 - Android 4.4.4),其中一个片段无法正常工作。但是,在Galaxy S3 - Android 4.4.4、Asus Zenfone 5、LG L2和模拟器上可以正常工作。该片段的代码如下:
    <RelativeLayout 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"
    android:background="@drawable/exercise_g_background"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.sfcodingteam.psykeappautostima.slidingmenu.fragments.exercise.ExerciseG">

    <ImageButton
        android:id="@+id/btnNext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:background="@drawable/buttons_exercise_g"
        android:contentDescription="@string/Forward"
        android:src="@drawable/ic_go_next" />

    <ImageButton
        android:id="@+id/btnPrevious"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:background="@drawable/buttons_exercise_g"
        android:contentDescription="@string/Back"
        android:src="@drawable/ic_go_previous" />

    <ImageButton
        android:id="@+id/btnAudio"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/btnNext"
        android:layout_centerHorizontal="true"
        android:background="@drawable/buttons_exercise_g"
        android:contentDescription="@string/Audio" />

    <ViewFlipper
        android:id="@+id/viewFlipper"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ScrollView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content">

                <TextView
                    android:id="@+id/textViewTitleG00"
                    style="@style/TitleStyle"
                    android:layout_alignParentTop="true"
                    android:layout_centerHorizontal="true"
                    android:text="@string/G" />

                <TextView
                    android:id="@+id/textViewG00"
                    style="@style/TextStyleFirstSentence"
                    android:layout_alignParentEnd="false"
                    android:layout_alignParentRight="true"
                    android:layout_below="@+id/textViewTitleG00"
                    android:layout_marginTop="25dp"
                    android:text="@string/ExerciseG00" />

                <Button
                    android:id="@+id/btnStart"
                    android:layout_width="60dp"
                    android:layout_height="60dp"
                    android:layout_below="@+id/textViewG00"
                    android:layout_centerHorizontal="true"
                    android:layout_marginTop="80dp"
                    android:background="@drawable/buttons_exercise_g"
                    android:text="@string/btnStart"
                    android:textColor="@android:color/white"
                    android:textStyle="bold" />
            </RelativeLayout>
        </ScrollView>
    </ViewFlipper>
</RelativeLayout>

以下是所有图像按钮的初始化:

protected void initializeBtnNext() {
        btnNext = (ImageButton) view.findViewById(R.id.btnNext);
        if (btnNext == null)
            return;
        btnNext.setVisibility(View.INVISIBLE);
        btnNext.setEnabled(false);
        btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (viewFlipper.getDisplayedChild() + 1 < viewFlipper.getChildCount())
                    goNext();
                else getActivity().onBackPressed();
            }
        });
    }

    protected void initializeBtnAudio() {
        btnAudio = (ImageButton) view.findViewById(R.id.btnAudio);
        if (btnAudio == null)
            return;
        btnAudio.setImageResource(R.drawable.ic_play);
        btnAudio.setEnabled(false);
        btnAudio.setVisibility(View.INVISIBLE);
        btnAudio.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onClickBtnAudio();
            }
        });
    }

    protected void initializeBtnPrevious() {
        btnPrevious = (ImageButton) view.findViewById(R.id.btnPrevious);
        if (btnPrevious == null)
            return;
        btnPrevious.setVisibility(View.INVISIBLE);
        btnPrevious.setEnabled(false);
        btnPrevious.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                goPrevious();
            }
        });
    }

    protected void initializeBtnStart() {
        btnStart = (Button) view.findViewById(R.id.btnStart);
        if (btnStart == null)
            return;
        btnStart.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                goNext();
            }
        });
    }

所有片段的初始化都是相同的(所有片段都有btnNext,btnPrevious,btnAudio和btnStart)。

只有btnStart正常工作,其他按钮不起作用。

你有什么建议吗?

编辑:找到了问题,viewFlipper在我试图到达的按钮上方。

所以,我只需要添加

android:layout_above="@+id/btnNext"

在viewFlipper中,我已经准备就绪!谢谢大家!


为了更好的方法,请使用switch case或者查看这个链接http://www.mkyong.com/android/android-imagebutton-example/。 - IntelliJ Amiya
很高兴看到它正在运行。 - IntelliJ Amiya
4个回答

3

刚刚更新了您的 ImageButton XML

<ImageButton
    android:id="@+id/btnNext"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:background="@drawable/buttons_exercise_g"
    android:contentDescription="@string/Forward"
    android:src="@drawable/ic_go_next" 
    android:clickable="true"/>

在Java中。
// Set this oncreate method 

    ImageButton btn=(ImageButton)findViewById(R.id.btnNext);
    btn.setOnClickListener(this);


// Then implement this 
     @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        switch (v.getId()) {
            case R.id.btnNext :
               //Show Toast
                break;

            default :
                break;
        }

    }

0

你在其他地方是否已经启用了按钮?因为它们全部都是禁用的。

btnXXX.setEnabled(false);

是的,在单击btnStart后,按钮将被启用。 - Silvio Barbieri

-1

XML 文件:

            <EditText
                android:id="@+id/editbankrefdate"
                android:layout_height="50dip"
                android:layout_marginLeft="3dip"
                android:background="#FFFFFF"
                android:inputType="date"
                android:singleLine="true"
                android:tag="focusable"
                android:width="170dip" />

            <ImageButton
                android:id="@+id/selectdateimg"
                android:layout_width="wrap_content"
                android:layout_height="50dip"
                android:layout_alignBottom="@+id/editText"
                android:layout_toRightOf="@+id/editText"
                android:cropToPadding="true"
                android:src="@drawable/calendar" />

而Java代码是:

ImageButton xClickDateImg;

xClickDateImg = (ImageButton) findViewById(R.id.selectdateimg);

xClickDateImg.setOnClickListener(this);


/*
 * PerForm Date Click Operation ---------------
 */
@Override
public void onClick(View v) {
    showDialog(0);
}

@Deprecated
protected Dialog onCreateDialog(int id) {
    return new DatePickerDialog(this, datePickerListener, year, month, day);
}

private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
    public void onDateSet(DatePicker view, int selectedYear,
            int selectedMonth, int selectedDay) {
        edtRefdate.setKeyListener(null);
        edtRefdate.setText(selectedDay + " / " + (selectedMonth + 1)
                + " / " + selectedYear);
    }
};
/*
 * PerForm Date Click Operation Ended
 * -------------------------------------------------------------
 */

1
如果您在代码旁边提供一些评论,答案将更有用。 - O. Jones

-2
你可以试试这个。我正在使用它,对于所有设备都运行良好。
<ImageView
            android:id="@+id/imgButton"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:clickable="true"
            android:focusable="true"
            android:longClickable="true"
            android:onClick="refreshData"
            android:layout_margin="3dp"
            android:contentDescription="@string/lbl_refresh"
            android:src="@drawable/refresh_image" />

refreshData方法是Java中的:

public void refreshData(View view) {
       // all the code here
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接