10

Arama önerilerini “light theme” olarak değiştirmeye çalışıyorum. Appcompat-v7: 22.2.0 kitaplığını kullanıyorum ve arama görünümü widget'ını özelleştirmek için yaklaşık new feature'u okuyorum (android.support.v7.widget.SearchView).Araç Çubuğu Arama Önerileri Tema Oluşturma

İLK YTL BÖLÜM

Çubuğu

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/colorPrimary" 
    android:minHeight="?attr/actionBarSize" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /> 

Ana Tema

<style name="Main.Theme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimary">@color/red</item> 
    <item name="colorPrimaryDark">@color/red_dark</item> 
    <item name="searchViewStyle">@style/Main.Theme.SearchView</item> 
</style> 

SearchView Tema

<style name="Main.Theme.SearchView" parent="Widget.AppCompat.Light.SearchView"> 
    <item name="voiceIcon">@mipmap/test_icon</item> 
</style> 

ben arama görünümünü etkilemesi mümkün değilim Bu şekilde. Test etmek için arama görünümündeki ses simgesini değiştiriyorum ve varsayılan olarak değişmiyor.

İKİNCİ YTL BÖLÜM ikinci deneyin bindirme araç çubuğunda tema geçersiz kılmak için oldu

:

Yerleşimi Tema

<style name="Main.Theme.Overlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> 
    <item name="searchViewStyle">@style/Main.Theme.SearchView</item> 
</style> 

bazı geribildirim ettik Bu şekilde, ama ben özellikle "eski" ipucu ikonunu buldum ve altı çizildi.

Öneri satır düzenini

<item name="suggestionRowLayout">@layout/my_custom_layout</item> 

Ben bu ... beni yardımcı olabilir gerçekleştirmek için uzak olduğumu düşünüyorum: Benim nihai amacı arama önerisi satır arka planını değiştirmek için mi?

Kendi arama önerilerini kullanıyorum nasıl budur
+0

buna bir çözüm buldunuz mu? Aynı sorunla da karşı karşıyayım. App ayarlama: tema = "@ style/ThemeOverlay.AppCompat.ActionBar" Araç Çubuğu için öneri açılır açık renkli yapar. Ama amacına hizmet etmiyor. – Sreekanth

+0

@Sreekanth: Araç Çubuğunda, "app: theme =" @ style/Main.Theme.Overlay "' yerine "app: theme =" @ style/ThemeOverlay.AppCompat.Dark.ActionBar "' –

+1

'u kullanmalısınız. "Main.Theme.Overlay"? – Sreekanth

cevap

3

...

Bu sadece önerilerin tüm ülke adı göstermek benim CountriesFragment dosyasıdır.

Buradaki hilede, gösterilmesi için Öneri listesine özel bir Görünüm sağladım. Burada

public class CountriesFragment extends Fragment { 

    private boolean mSearchCheck; 
    private SimpleCursorAdapter mAdapter; 
    public static final String TEXT_FRAGMENT = "TEXT_FRAGMENT"; 
    public static final String CITY_NAME = "cityName"; 
    private LayoutInflater mInflater; 
    private ViewGroup mainContainer; 

    private static final String[] COUNTRIES = { 
      "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", "Angola", "Anguilla", "Antarctica", 
      "Antigua and Barbuda", "Argentina", "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", "Bahamas", "Bahrain", "Bangladesh", "Barbados", 
      "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia", "Bosnia and Herzegowina", "Botswana", "Bouvet Island", "Brazil", 
      "British Indian Ocean Territory", "Brunei Darussalam", "Bulgaria", "Burkina Faso", "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde", 
      "Cayman Islands", "Central African Republic", "Chad", "Chile", "China", "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", 
      "Congo", "Congo, the Democratic Republic of the", "Cook Islands", "Costa Rica", "Cote d'Ivoire", "Croatia (Hrvatska)", "Cuba", "Cyprus", 
      "Czech Republic", "Denmark", "Djibouti", "Dominica", "Dominican Republic", "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", 
      "Eritrea", "Estonia", "Ethiopia", "Falkland Islands (Malvinas)", "Faroe Islands", "Fiji", "Finland", "France", "France Metropolitan", "French Guiana", 
      "French Polynesia", "French Southern Territories", "Gabon", "Gambia", "Georgia", "Germany", "Ghana", "Gibraltar", "Greece", "Greenland", "Grenada", 
      "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Heard and Mc Donald Islands", "Holy See (Vatican City State)", 
      "Honduras", "Hong Kong", "Hungary", "Iceland", "India", "Indonesia", "Iran (Islamic Republic of)", "Iraq", "Ireland", "Israel", "Italy", "Jamaica", 
      "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Korea, Democratic People's Republic of", "Korea, Republic of", "Kuwait", "Kyrgyzstan", 
      "Lao, People's Democratic Republic", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libyan Arab Jamahiriya", "Liechtenstein", "Lithuania", "Luxembourg", 
      "Macau", "Macedonia, The Former Yugoslav Republic of", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", "Martinique", 
      "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia, Federated States of", "Moldova, Republic of", "Monaco", "Mongolia", "Montserrat", "Morocco", 
      "Mozambique", "Myanmar", "Namibia", "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand", "Nicaragua", "Niger", "Nigeria", 
      "Niue", "Norfolk Island", "Northern Mariana Islands", "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", 
      "Pitcairn", "Poland", "Portugal", "Puerto Rico", "Qatar", "Reunion", "Romania", "Russian Federation", "Rwanda", "Saint Kitts and Nevis", "Saint Lucia", 
      "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Sao Tome and Principe", "Saudi Arabia", "Senegal", "Seychelles", "Sierra Leone", "Singapore", 
      "Slovakia (Slovak Republic)", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "Spain", "Sri Lanka", 
      "St. Helena", "St. Pierre and Miquelon", "Sudan", "Suriname", "Svalbard and Jan Mayen Islands", "Swaziland", "Sweden", "Switzerland", "Syrian Arab Republic", 
      "Taiwan, Province of China", "Tajikistan", "Tanzania, United Republic of", "Thailand", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", 
      "Turkey", "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", 
      "United States Minor Outlying Islands", "Uruguay", "Uzbekistan", "Vanuatu", "Venezuela", "Vietnam", "Virgin Islands (British)", "Virgin Islands (U.S.)", 
      "Wallis and Futuna Islands", "Western Sahara", "Yemen", "Yugoslavia", "Zambia", "Zimbabwe" 
    }; 

    public static CountriesFragment newInstance(String text) { 
     CountriesFragment mFragment = new CountriesFragment(); 
     Bundle mBundle = new Bundle(); 
     mBundle.putString(TEXT_FRAGMENT, text); 
     mFragment.setArguments(mBundle); 
     return mFragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     loadHints(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_countries, container, false); 
     mInflater = inflater; 
     mainContainer = (ViewGroup) rootView.findViewById(R.id.container); 
     //rootView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); 
     return rootView; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setHasOptionsMenu(true); 
    } 

    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
     inflater.inflate(R.menu.menu, menu); 

     SearchView searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.menu_search)); 
     searchView.setQueryHint(this.getString(R.string.search)); 

     ((EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text)) 
       .setHintTextColor(getResources().getColor(R.color.nliveo_white)); 


     searchView.setSuggestionsAdapter(mAdapter); 
     searchView.setOnQueryTextListener(onQuerySearchView); 
     searchView.setOnSuggestionListener(onQuerySuggestion); 

     menu.findItem(R.id.menu_add).setVisible(true); 
     menu.findItem(R.id.menu_search).setVisible(true); 

     mSearchCheck = false; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()) { 

      case R.id.menu_add: 
       addCountry(); 
       break; 

      case R.id.menu_search: 
       mSearchCheck = true; 
       break; 
     } 
     return true; 
    } 

    private void addCountry() { 
     final ViewGroup newView = (ViewGroup) mInflater.inflate(R.layout.country_row, mainContainer, false); 
     final TextView countryName = (TextView) newView.findViewById(android.R.id.text1); 
     countryName.setText(COUNTRIES[(int) (Math.random() * COUNTRIES.length)]); 


     final Animation fadeIn = AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in); 
     final Animation fadeOut = AnimationUtils.loadAnimation(getActivity(), R.anim.fade_out); 
     fadeIn.setFillAfter(false); 
     fadeOut.setFillAfter(false); 

     final ImageButton closeButton = (ImageButton) newView.findViewById(R.id.delete_button); 
     closeButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       newView.startAnimation(fadeOut); 
       new Handler().postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         mainContainer.removeView(newView); 
        } 
       }, fadeOut.getDuration()); 
      } 
     }); 

     mainContainer.addView(newView, 0); 
     newView.startAnimation(fadeIn); 
    } 

    private SearchView.OnQueryTextListener onQuerySearchView = new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      mSearchCheck = false; 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String query) { 
      if (mSearchCheck) { 
       // implement your search here 
       giveSuggestions(query); 
      } 
      return false; 
     } 
    }; 

    private void giveSuggestions(String query) { 
     final MatrixCursor cursor = new MatrixCursor(new String[]{BaseColumns._ID, CITY_NAME}); 
     for (int i = 0; i < COUNTRIES.length; i++) { 
      if (COUNTRIES[i].toLowerCase().contains(query.toLowerCase())) 
       cursor.addRow(new Object[]{i, COUNTRIES[i]}); 
     } 
     mAdapter.changeCursor(cursor); 
    } 

    private SearchView.OnSuggestionListener onQuerySuggestion = new SearchView.OnSuggestionListener() { 
     @Override 
     public boolean onSuggestionSelect(int position) { 
      return false; 
     } 

     @Override 
     public boolean onSuggestionClick(int position) { 
      return false; 
     } 
    }; 

    private void loadHints() { 
     final String[] from = new String[]{CITY_NAME}; 
     final int[] to = new int[]{android.R.id.text1}; 
     mAdapter = new SimpleCursorAdapter(getActivity(), 
       R.layout.hint_row, 
       null, 
       from, 
       to, 
       CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); 
    } 
} 

SearchView sahip hint_row.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="48dp" 
    android:textAppearance="?android:attr/textAppearanceListItemSmall" 
    android:gravity="center_vertical" 
    android:background="@color/nliveo_green_colorPrimaryDark" 
    android:textColor="@color/nliveo_white" 
    android:paddingLeft="15dp" 
    android:paddingRight="15dp" 
    android:minHeight="?android:attr/listPreferredItemHeightSmall" 
    android:elevation="3dp" 
    android:alpha="0.7" /> 

Basit menü dosyasıdır. menu.xml

<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" 
     app:actionViewClass="android.support.v7.widget.SearchView" 
     android:icon="@mipmap/ic_search_white_24dp" 
     app:showAsAction="ifRoom|collapseActionView" 
     android:title="@string/search"/> 
    <item 
     android:id="@+id/menu_add" 
     android:icon="@mipmap/ic_add_white_24dp" 
     app:showAsAction="ifRoom" 
     android:title="@string/add"/> 

</menu> 

Bu güzel önerileri alıyorum ...

Custom Hints

+1

* Araç çubuğunda karanlık tema bulunurken öneriler için hafif bir temayı nasıl açabileceğimizi lütfen öneriniz. * – Machado

3

Öneriler sistemi tarafından oluşturulan dinamik bir listedir ve bir faaliyet değildir. Yani ona hafif bir tema uygulayamazsın.

Bunun yerine stili kullanarak hafif bir tema gibi hissettirmek için önerileri özelleştirebilirsiniz.

kullanımı bu hint_row.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    style="@style/suggestionsTheme" 
    android:layout_width="match_parent" 
    android:layout_height="48dp" 
    android:gravity="center_vertical" 
    android:text="demo" 
    android:paddingLeft="15dp" 
    android:paddingRight="15dp" /> 

Ve uygulamak bu tarz Şimdi

<style name="suggestionsTheme" parent="TextAppearance.AppCompat.Light.SearchResult.Subtitle" > 
     <item name="android:background">@android:color/white</item> 
     <item name="android:textColor">@android:color/black</item> 

alıyorum bu

Light suggestions

Sen ihtiyaca

göre daha stil verebilir
+0

Uygulamaya "hint_row.xml" ifadesini emme arayüzü olarak nasıl kullanacağımı nasıl söylerim? – Sreekanth

+0

Önceki cevabımı görün. Yukarıdaki ifadeleri kullanın 'CountriesFragment.java' –

+0

Her iki cevap farklı olduğu için farklı bir yanıt gönderdim. Birincisi özel önerilerle ilgili, ikincisi ise hafif appcompat searchview temasını önerilere uygulamakla ilgilidir. Her ikisi de birbirinden bağımsızdır. Biri uygulamada ne istediğini kullanabilir ... –