web-dev-qa-db-ja.com

Android:ランタイムでボタンを有効/無効にしますか?

わかりましたので、2つのボタンがあります。 1つ目は「テキストの読み込み」、2つ目は「読み上げ」です。

ここで、テキストが読み込まれていないときに[読み上げ]ボタンをアクティブにしたくありません。

[テキストの読み込み]ボタンの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" />

ここで有効にしてから、実行時に無効にして有効にする必要がありますか?

8
iMan
@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!");
    }

}
13
MR. Kumar

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();
}
_
8

ボタンが押されているかどうかを確認し、コードを記述します。

サンプルコード。

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

これがお役に立てば幸いです。

5
Gunaseelan

答えるには遅すぎる可能性があり、すでに解決策を見つけましたが、無効化を使用して、ボタンを新しい状態に従って強制的に再描画させることができます。

btnSpeak.setEnabled(true);
btnSpeak.invalidate();
3
Jesús Barrera

ボタンの表示を無効にしてから有効にすることで達成できます

ここに例があります

View button = findViewById(R.id.buttonid);
button.setVisibility(View.GONE);
1
Bucks

両方のボタンに1つのリスナーを使用する

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;
        }
    }
});
0
techieWings