2013-03-15 26 views
20

Arama görünümü genişletildiğinde, tek eylem öğesi görünürken, katlanabilir arama görünümü ile ActionBar nasıl oluşturulur? Orada diğer menü öğeleri ve android:uiOptions="splitActionBarWhenNarrow"AndroidManifest.xml içinde tanımlandığınıAndroid ActionBar: daraltılabilir Eylem düğmesi ile SearchView

enter image description here Not: daha açıklayıcı olmak gerekirse, bu ihtiyaç duyuyorum.

Ben özel arama Öğe düzenini kurmaya çalıştı:

menu.xml actionbar_search.xml

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

    <com.actionbarsherlock.widget.SearchView 
     android:id="@+id/search_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:iconifiedByDefault="false" 
     android:queryHint="@string/search_hint" /> 

    <ImageButton 
     android:id="@+id/add_item" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     style="@style/Widget.Sherlock.ActionButton" 
     android:src="@drawable/content_new"/> 

</LinearLayout> 

Ama defaul tarafından

<item 
    android:id="@+id/menu_search" 
    android:actionLayout="@layout/actionbar_search" 
    android:icon="@drawable/action_search" 
    android:showAsAction="always|collapseActionView" 
    android:title="@string/search" /> 

t arama görünümü mevcut tüm genişlikleri alır ve düğme görünmez. Uygulama simgesi ve menü öğesi arasındaki kullanılabilir alanı doldurmak için SearchView'u nasıl zorlayacağımı bilmiyorum. Tek bulduğum android:maxWidth özelliği, ancak bu sadece kodlanmış boyut sağlar ve ben daha esnek bir çözüm arıyorum. Ayrıca'u android:layout_toRightOf="@id/search_view" ile şanssız olarak denedim.

cevap

9

yorumlardan önerileri değerlendirdikten sonra, birçok googling ve test istenen etkiyi elde etmeyi başardı. Bu çözümle gurur duymuyorum ama işe yarıyor, bu çok karmaşık değil ve bu dava için yeterli olmalı. Ne yaptığımı özetlemede

:

  1. ActionBar arasında customView düğmesini "öğe eklemek" özel ile SearchView yerleştirilemez.
  2. programlı SearchView genişleyen/Collapsing menu.xml
  3. arama öğesinden collapseActionView ve android:actionLayout kaldırıldı. Ne yaptığımı daha iyi anlamak için bazı kodlar

Belki bu birisi için yararlı olabilir.

menu.xml

<item 
    android:id="@+id/menu_search" 
    android:icon="@drawable/action_search" 
    android:showAsAction="always" 
    android:title="@string/search" /> 

// ... other menu items 

actionbar_search.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="right" 
    android:orientation="horizontal"> 

    <com.actionbarsherlock.widget.SearchView 
     android:id="@+id/search_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:iconifiedByDefault="false" 
     android:queryHint="@string/search_hint" 
     android:visibility="invisible" /> 

    <ImageButton 
     android:id="@+id/add_item" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     style="@style/Widget.Sherlock.ActionButton" 
     android:src="@drawable/content_new" 
     android:title="@string/add_item" /> 

</LinearLayout> 

MainActivity.java

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // ... 
    actionBar.setCustomView(R.layout.actionbar_search); 
    actionBarCustomView = ab.getCustomView(); 
    searchView = ((SearchView) actionBarCustomView.findViewById(R.id.search_view)); 
    searchView.setOnCloseListener(new SearchView.OnCloseListener() { 
     @Override 
     public boolean onClose() { 
      searchView.setVisibility(View.INVISIBLE); 
      return false; 
     } 
    }); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     // ... 
     case R.id.menu_search: 
      if (searchView.getVisibility() == View.VISIBLE) { 
       searchView.setIconified(true); 
       searchView.setVisibility(View.INVISIBLE); 
      } else { 
       searchView.setMaxWidth(abCustomView.getWidth() - addButton.getWidth()); 
       searchView.setVisibility(View.VISIBLE); 
       searchView.setIconified(false); 
      } 
      break; 
     // ... 
    } 
    return true; 
} 

@Override 
public void onBackPressed() { 

    if (searchView.getVisibility() == View.VISIBLE) { 
     searchView.setIconified(true); 
     searchView.setVisibility(View.INVISIBLE); 
     return; 
    } 

    // ... 
} 
+0

Merhaba, yukarıdaki çözüm denedim ama hiç çalışmıyor. Aslında eylem öğelerinden hiçbirini göremiyorum. – AndoAiron

+0

Kodunuzun parçalarını gönderir misiniz (örneğin, gist olarak)? Bunu anlamak ve test etmek için birkaç gün harcadım, yardım edebileceğimi düşünüyorum. –

+0

Kod parçamı nereye postalamalıyım? Sorun kodumu yorum olarak gönderemiyorum. Ayrıca, bunu başarmak için bana yardımcı olabilir misiniz: http://stackoverflow.com/questions/15947557/sherlockactionbar-with-autocompletetextview-and-other-items?noredirect=1#comment22723847_15947557 – AndoAiron

2

Yalnızca bu menüyü.xml kullanarak yapabilirsiniz.

Her zaman eylem olarak göstermek için diğer menü simgesini ayarlayın. Sizin menu.xml bu gibi görünmelidir:

<item 
    android:id="@+id/menu_search" 
    android:actionLayout="@layout/actionbar_search" 
    android:icon="@drawable/action_search" 
    android:showAsAction="always|collapseActionView" 
    android:title="@string/search" 
/> 
<item 
    android:id="@+id/your_other_menu_id" 
    android:showAsAction="always" 
    android:icon="@android:drawable/your_other_menu_ic" 
/> 
+0

Bu yaklaşım denendi. Bahsettiğim gibi, diğer menü öğeleri vardır ve hepsi alt actionbar'a taşar. Ve her zaman sağ üst köşeye yerleştirilmiş bir eyleme ihtiyacım var. –

+1

Bu durumda ayrıntı, daraltılmış arama görünümü değil, bölünmüş eylem çubuğudur. Bağlantıyı kontrol edin körük. Bu davranışı yerel nesneler kullanarak ayarlamak mümkün değildir. Kendi özelleştirilmiş işlem çubuğunuzu oluşturmanız gerekir. http://stackoverflow.com/questions/8571754/android-split-action-bar-with-action-items-on-the-top-and-bottom – JPMagalhaes

+0

Öneri için teşekkürler, ancak bunu zaten denedim. Custom ActionBar, SearchView çöktüğünde bana özel görünüm verir. Sonra üst çubuğumda tek düğmem var ve bunlar altta menu.xml. Sorun, SearchView'ın genişletildiği zamandır. Uygulama simgesi ve tek işlem öğesi arasındaki tüm kullanılabilir alanı doldurmaya zorlamam gerekiyor. SearchView sınıfının 'onMeasure()' ında ne olduğunu anlamaya çalıştım, ancak bununla ne yapabileceğimi tam olarak anlayamadım ve eğer doğru bir yön ise. Herhangi bir yardım takdir edilecektir. –

1

Basitçe menu.xml

showAsAction = "always"

Not yapmak bu

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    MenuItem searchItem = menu.findItem(R.id.action_search); 
    searchView = (SearchView) MenuItemCompat.getActionView(searchItem); 
    searchView.setIconified(true); //to be opened collapsed 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()){ 

     case R.id.action_search: 
      searchView.setIconified(false);// to Expand the SearchView when clicked 
      return true; 
    }  
    return false; 
} 

gibi Ve arama öğesi de yapabilirsiniz: Ben android.support.v7.widget.SearchView kullanıyorum ama senin durumunda bu önemli değil

+1

benim için çalışmıyor: (( –

+0

Bu kod uygun değil mi? – HMagdy

+0

@salma evet sağ android.support.v7.widget.SearchView ve android.widget.search konu çok düşünüyorum –

0

Sadece bir değişiklik menüsü xml. Uygulama adınıza showaction öneki

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

<item 
    android:id="@+id/menu_search" 
    android:actionLayout="@layout/actionbar_search" 
    android:icon="@drawable/action_search" 
    app:showAsAction="always|collapseActionView" 
    android:title="@string/search" 
/> 

</menu>