0

Android プログラムの ActionBar に EditText 要素を追加しました。アイコンをクリックすると、EditText 要素が表示され、リターン キーまたはエンター キーが押されると、データが入力およびキャプチャされます。EditText 要素を非表示にしてアイコンを再表示するにはどうすればよいですか? 現在、EditText フィールドは ActionBar に残り、アイコンは非表示になっています。以下は私のメニューxmlファイルです。どんな助けでも大歓迎です。

       <menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/action_settings"/>
  <item
    android:id="@+id/herbsearch"
    android:title="HerbSearch"
    android:showAsAction="always"
    android:icon="@android:drawable/ic_menu_search"
    />
   <item
    android:id="@+id/locationchange"
    android:title="Change Location"
    android:showAsAction="ifRoom|collapseActionView"
    android:icon="@drawable/ic_launcher"
    android:actionLayout="@layout/search_layout"
    />

そして、これが私の EditText レイアウトです。

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >

<EditText
    android:id="@+id/txt_search"
    android:inputType="text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#FFFFFF"
    android:textColor="#000000"
    android:textSize="15sp"
     android:singleLine="true"
     android:hint="Enter new location"
    android:imeOptions="actionDone"
/>

以下は私の onCreateOptionsMenu ロジックです。

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);

    /** Get the action view of the menu item whose id is search */
    View v = (View) menu.findItem(R.id.locationchange).getActionView();

    /** Get the edit text from the action view */
    EditText locSearch = ( EditText ) v.findViewById(R.id.txt_search);
    locSearch.requestFocus();
    /** Setting an action listener */
    locSearch.setOnEditorActionListener(new OnEditorActionListener() {

        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        //    Toast.makeText(getBaseContext(), "Search : " + v.getText(), Toast.LENGTH_SHORT).show();

            GetMap(String.valueOf(v.getText()));
            invalidateOptionsMenu();

            /** Get the edit text from the action view */
            EditText locSearch = ( EditText ) v.findViewById(R.id.txt_search);

        // I tried these next 3 instructions with no success
        //   locSearch.setVisibility(1);   

         //  v.setTextColor(Color.WHITE);

        //   v.setVisibility(1);
            return false;

        }
    });
   }
4

1 に答える 1

1

これを試して:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);

    final MenuItem locationItem = menu.findItem(R.id.locationchange);
    View v = (View) locationItem.getActionView();
    EditText locSearch = (EditText) v.findViewById(R.id.txt_search);
    locSearch.requestFocus();

    locSearch.setOnEditorActionListener(new OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_SEARCH || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
                locationItem.collapseActionView();
                return true;
            }
            return false;
        }
    });
}

行 final MenuItem locationItem = menu.findItem(R.id.locationchange); を追加しました。場所の変更メニュー項目を取得するために、locationItem.collapseActionView(); を呼び出しています。アクションビュー/検索ビューを取り除きます。

于 2013-03-25T01:04:27.963 に答える