8

好的,所以我有两个按钮。第一个是“加载文本”,第二个是“说出来”。

现在,我不希望 Speak 按钮在没有加载文本时处于活动状态。

我设法通过加载文本按钮的 onClickListener 方法将值设置为 EditText。在我调用的相同方法中,

btnSpeak.setEnabled(true);

我已将其初始化为,

btnSpeak = (Button) findViewById(R.id.button1);

整个编码是,

@Override
public void onInit(int status) {

    if (status == TextToSpeech.SUCCESS) {

        int result = tts.setLanguage(Locale.US);

        if (result == TextToSpeech.LANG_MISSING_DATA
        || result == TextToSpeech.LANG_NOT_SUPPORTED) {
            Log.e("TTS", "This Language is not supported");
        } else {
            btnSpeak.setEnabled(true);
            //for checking
            if(btnSpeak.isEnabled())
            {
                Toast.makeText(SimpleAndroidOCRActivity.this, "Button should work!", Toast.LENGTH_SHORT).show();
            }
            else
            {
                Toast.makeText(SimpleAndroidOCRActivity.this, "Button should not work!", Toast.LENGTH_SHORT).show();
            }
        }

    } else {
        Log.e("TTS", "Initilization Failed!");
    }

}

这是为了检查状态并将语言分配给 TTS 以供进一步使用。我得到了“按钮应该可以工作”的祝酒词,但它没有被启用。为什么会这样?有什么工作?

我在 .xml 文件中作为,

<Button
    android:id="@+id/button1"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_width="200dp"
    android:enabled="false"
    android:text="@string/tts_text" />

我应该在这里启用它,然后在运行时禁用和启用吗?

4

6 回答 6

13
@Override
public void onInit(int status) {

    if (status == TextToSpeech.SUCCESS) {

        int result = tts.setLanguage(Locale.US);

        if (result == TextToSpeech.LANG_MISSING_DATA
        || result == TextToSpeech.LANG_NOT_SUPPORTED) {
            Log.e("TTS", "This Language is not supported");
        } else {
            btnSpeak.setEnabled(true);
            //for checking
            if(btnSpeak.isEnabled())
            {
                btnSpeak.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View view) {
                        YourVoicemethod();

                        Toast.makeText(SimpleAndroidOCRActivity.this, "Button should work!", Toast.LENGTH_SHORT).show();
                    }


                });
            }
            else
            {
                Toast.makeText(SimpleAndroidOCRActivity.this, "Button should not work!", Toast.LENGTH_SHORT).show();
            }
        }

    } else {
        Log.e("TTS", "Initilization Failed!");
    }

}
于 2013-04-23T12:06:27.480 回答
8

你必须使用setClickable

btnSpeak.setClickable(true);
btnSpeak.setEnabled(true);

另外,用于isEnabled()检查状态

//for checking
if(btnSpeak.isEnabled())
{
  Toast.makeText(SimpleAndroidOCRActivity.this, "Button should work!", Toast.LENGTH_SHORT).show();
}
else
{
  Toast.makeText(SimpleAndroidOCRActivity.this, "Button should not work!", Toast.LENGTH_SHORT).show();
}
于 2013-04-23T11:59:36.270 回答
5

检查您的按钮是否被按下并编写您的代码。

示例代码。

if(button2.isPressed()){
    button2.setEnabled(false);
    button1.setEnabled(true);
}
else if(button1.isPressed()){
    button1.setEnabled(false);
    button2.setEnabled(true);
}

我希望这能帮到您。

于 2013-04-23T12:07:29.220 回答
3

回答可能为时已晚,您已经找到了解决方案,但您可以使用 invalidate 强制按钮根据其新状态重绘自身:

btnSpeak.setEnabled(true);
btnSpeak.invalidate();
于 2017-04-20T22:36:54.953 回答
1

您可以通过禁用和启用按钮的可见性来实现

这是一个例子

View button = findViewById(R.id.buttonid);
button.setVisibility(View.GONE);
于 2013-04-23T12:13:20.267 回答
0

为两个按钮使用一个侦听器

button1.setOnClickListener(listener);
button2.setOnClickListener(listener);

listener = new OnClickListener({
    @Override
    public void onClick(View v) {
        switch(button_id){
            case id1:
            button2.setEnabled(false);
            button1.setEnabled(true);
            break;
            case id2:
            button1.setEnabled(false);
            button2.setEnabled(true);
            break;
        }
    }
});
于 2013-04-23T12:28:32.093 回答