0

これは私のコードです:

    package com.testotspeech;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Locale;

import android.app.Activity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

public class AndroidTestToSpeechActivity extends Activity implements
        TextToSpeech.OnInitListener, OnItemSelectedListener {
    /** Called when the activity is first created. */

    private TextToSpeech tts;
    private Button btnSpeak;
    private EditText txtText;
    private ArrayList<String> itemsList;
    private Spinner spinner;
    private String contry_name;
    private ArrayAdapter<String> dataAdapter;
    private TextView textview;
    private Iterator itr;
    private String[] t = {"Please Select An Item"};

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Log.i("----------",Arrays.toString(Locale.getAvailableLocales()));
        itemsList = new ArrayList<String>();
        itemsList.add(Arrays.toString(Locale.getAvailableLocales()));
        spinner = (Spinner)findViewById(R.id.spinner1);
        spinner.setOnItemSelectedListener(this);


        dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,t);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
        spinner.setAdapter(dataAdapter);
        textview = (TextView)findViewById(R.id.textView1);






        tts = new TextToSpeech(this, this);
        btnSpeak = (Button) findViewById(R.id.btnSpeak);
        txtText = (EditText) findViewById(R.id.txtText);

        // button on click event
        btnSpeak.setOnClickListener(new View.OnClickListener() {

            public void onClick(View arg0) {
                speakOut();
            }

        });
    }

    @Override
    public void onDestroy() {
        // Don't forget to shutdown tts!
        if (tts != null) {
            tts.stop();
            tts.shutdown();
        }
        super.onDestroy();
    }

    public void onInit(int status) {

        if (status == TextToSpeech.SUCCESS) {

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

            if (result == TextToSpeech.LANG_MISSING_DATA
                    || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                Log.e("TTS", "This Language is not supported");
            } else {
                btnSpeak.setEnabled(true);
                speakOut();

            }

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

    }

    private void speakOut() {

        String text = txtText.getText().toString();
        tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
    }

    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {

        if (position == 0)
        {
        }
        else
        {

        }
    }

    public void onNothingSelected(AdapterView<?> parent) {
        textview.setText("");
    }


}

編集:

私がやりたいことは、スピナーをクリックすると、それが折りたたまれたり開いたりし、各アイテムとそれ自体のボックスが表示され、それが列に並んで表示されることです。たとえば、スピナーをクリックすると、その下に表示されます。

こんにちは

さよなら

ダニエル

そして今、Helloをクリックすると、HelloがtextView1に配置され、Byeをクリックすると、textView1にも配置されます。しかし、スピナーのデザインのグラフィックは、クリックすると折りたたまれてアイテムが一列に表示されるので、各アイテムをクリックして 1 回のクリックで選択できます。

今私がしたことは、スピナーに「アイテムを選択してください」というテキストを追加するだけです。たとえば、どのようにしたいかの画像をアップロードしました。

スピナーの例

4

2 に答える 2

1

これがスピナーの動作であり、常に選択されたアイテムがあります。

フラグを作成し、それをのオーバーライドでonItemSelected使用し、そこにカウンターを配置し、それを使用しての最初の無視を行うことができます。

このような:

private int spinnerSelectCount = 0;

@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    if(spinnerSelectCount == 0) {
        // Do nothing... initial item on spinner display is the selected item
    } else {
        // your code to process spinner selection here
    }
    }
});

編集

文字列は、個別の文字列ではなく、配列の最初の項目として配置する必要があります。

itemsList = new ArrayList<String>();  
itemsList.add("Please Select An Item");
itemsList.add(Arrays.toString(Locale.getAvailableLocales())); 

次に、配列を使用してスピナーを呼び出します。

    dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,itemsList);        
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);        
    spinner.setAdapter(dataAdapter);  

そして、あなたはそれをしているので、あなたは数ではなく位置に基づくようにフィルターを変えるべきです。

@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    if(pos == 0) {
        // Do nothing... initial item on spinner display is the selected item
    } else {
        // your code to process spinner selection here
        textview.setText(itemsList.get(pos));
    }
    }
});

編集2

マルチセレクションをお探しですか?これは標準のスピナーでは不可能で、1つのアイテムのみを選択するように設定されています。本当に複数のアイテムを選択したい場合は、リストを使用するか、カスタムスピナーを作成する必要があります。

幸いなことに、誰かがすでにそれを行っているようです。あなたはこのSO回答でコードを見つけることができます

編集3

MultiSpinnerは新しいプロジェクトを必要としません。新しいクラスを作成し、それを使用してスピナーにデータを入力するだけです。

1)MultiSpinnerという新しいクラスを作成します
2)リンクからコードをコピーします(独自のパッケージ名を使用するため、パッケージ名は省略します)
3)xmlで、次のようにスピナーを呼び出します(com.yourpackage.name実際のパッケージ名に置き換えます) :

<com.yourpackage.name.MultiSpinner android:id="@+id/multi_spinner" /> 

4)リンクに示されているようにスピナーを呼び出します。

MultiSpinner multiSpinner = (MultiSpinner) findViewById(R.id.multi_spinner); 
multiSpinner.setItems(items, getString(R.string.for_all), 
                this); 
于 2012-06-07T06:13:30.660 に答える
0

簡単な解決策は、スピナーの最初の項目を「値を選択してください..」のようなテキストに設定することです。次に、コードで。

@Override
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    if(pos == 0) {
    // do nothing..
    } else {
    // your code..
    }
}
});
于 2012-06-07T07:05:18.357 に答える