Ich entwickle gerade und Android-App, die Api10 + unterstützen muss Ich folgte viele Tutorials zu setzen AppCompat zu verwalten, um die Aktionsleiste zu erstellen.Android Appcompat API 10 Einsturz Aktion
Links wie: https://stackoverflow.com/a/21291156/2789106 http://developer.android.com/guide/topics/ui/actionbar.html
Es gibt nur drei Dinge, die ich nicht tun kann.
- Wenn die Suche geöffnet wird, ändert sich die Suchlupe NICHT in die von mir festgelegte Zeichenmenge.
- Ich kann nicht das „Zurück“ Symbol ändern (die home-Taste, um das Logo links (es ist ein verschiedenes Einrichtungs Bild als das, was ich in der Schaffung der
drawerToggle
weitergegeben)) - kann ich nicht programmatisch nahe (Kollaps) die Aktionsansicht, wenn auf die Tastatursuche geklickt wird. (Aufruf
collapseActionView()
wurde in API 14 inplemented)
Hier ist mein Code:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ActionBarDrawerToggle ties together the the proper interactions
// between the sliding drawer and the action bar app icon
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_navigation_drawer,
R.string.navigation_drawer_open,
R.string.navigation_drawer_close) {
/** Called when a drawer has settled in a completely closed state. */
public void onDrawerClosed(View view) {
supportInvalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
/** Called when a drawer has settled in a completely open state. */
public void onDrawerOpened(View drawerView) {
supportInvalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
};
// Set the drawer toggle as the DrawerListener
mDrawerLayout.setDrawerListener(mDrawerToggle);
// Restore app state if any
if (savedInstanceState == null) {
mLeftMenuContainer = (LinearLayout) findViewById(R.id.left_menu_container);
mLeftMenuContainer.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
// return TRUE to avoid tap on back view
return true;
}
});
mDrawerLayout.closeDrawer(mLeftMenuContainer);
}
// enable ActionBar app icon to behave as action to toggle nav drawer
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(true);
getSupportActionBar().setLogo(R.drawable.ic_action_bar_logo);
}
/* Called whenever we call supportInvalidateOptionsMenu() */
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// If the nav drawer is open, hide action items related to the content
// view
if (mDrawerLayout != null && mLeftMenuContainer != null) {
boolean drawerOpen = mDrawerLayout.isDrawerOpen(mLeftMenuContainer);
for (int i = 0; i < menu.size(); i++) {
menu.getItem(i).setVisible(!drawerOpen);
}
}
return super.onPrepareOptionsMenu(menu);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
mMenu = menu;
// Inflate the menu; this adds items to the action bar if it is present.
// enable ActionBar app icon to behave as action to toggle nav drawer
getMenuInflater().inflate(R.menu.main, menu);
MenuItem searchItem = menu.findItem(R.id.action_bar_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchableInfo info = searchManager.getSearchableInfo(getComponentName());
searchView.setSearchableInfo(info);
AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
searchText.setHintTextColor(getResources().getColor(R.color.color_action_bar_search_text));
searchText.setTextColor(getResources().getColor(R.color.color_action_bar_search_text));
searchView.setIconifiedByDefault(true);
// Getting the 'search_plate' LinearLayout.
View searchPlate = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate);
// Setting background of 'search_plate' to personal defined drawable.
if (searchPlate != null) {
searchPlate
.setBackgroundResource(R.drawable.texfield_search_view_theme);
}
// Set search view clear icon
ImageView searchIconClearView = (ImageView) searchView
.findViewById(android.support.v7.appcompat.R.id.search_close_btn);
if (searchIconClearView != null) {
Log.v(LOG_TAG, "Should Change Clear Icon here");
searchIconClearView
.setImageResource(R.drawable.ic_action_bar_clear_search);
}
// Set search view Magnifier icon
ImageView searchIcon = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon);
if (searchIcon != null) {
Log.v(LOG_TAG, "Should Change Search Icon here");
searchIcon.setImageResource(R.drawable.ic_action_bar_back);
}
// Set on click to open a fragment, not a activity
final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
// Do something
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
Log.v(LOG_TAG, "Performed search with: " + query);
searchView.clearFocus();
return true;
}
};
searchView.setOnQueryTextListener(queryTextListener);
MenuItemCompat.setOnActionExpandListener(searchItem, new OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem arg0) {
mMenu.findItem(R.id.action_bar_cart).setVisible(true);
return true;
}
@Override
public boolean onMenuItemActionExpand(MenuItem arg0) {
getSupportActionBar().setIcon(R.drawable.ic_action_bar_logo);
mMenu.findItem(R.id.action_bar_cart).setVisible(false);
return true;
}
});
return super.onCreateOptionsMenu(menu);
}
Kann mir bitte jemand sagen, ob ich etwas falsch tue?
- EDIT -
ich es geschafft Frage Nummer 1 und 2 zu beheben:
Was Sie tun müssen, ist die homeUpIcon in Ihrem Thema zu definieren. Wenn Sie also unterstützen API 10 wie mich:
<style name="Theme.MyTheme" parent="@style/Theme.AppCompat.Light">
<item name="searchViewSearchIcon">@drawable/your_search_icon</item>
<!-- API 13- Support -->
<item name="homeAsUpIndicator">@drawable/your_back_icon</item>
<!-- API 14+ -->
<item name="android:homeAsUpIndicator">@drawable/your_back_icon</item>
</style>
in
gefunden ActionBarSherlock: changing homeAsUpIndicator doesn't work
und Changing the background drawable of the searchview widget
Die wichtigste Frage ist noch anhängig, und wenn jemand die Antwort weiß, bitte hier posten!
ich mit 'App die MenuItem-Setup haben musste: showAsAction = "collapseActionView | immer"', bevor diese funktionieren würde. –