ActionBar Sherlock涵盖了所有屏幕(ActionBar Sherlock covers all screen)

编程入门 行业动态 更新时间:2024-10-17 07:39:49
ActionBar Sherlock涵盖了所有屏幕(ActionBar Sherlock covers all screen)

我刚刚在我的Android应用程序中实现了Sherlock的ActionBar。

问题是:正如您从图像中看到的那样,加载在MainActivity中的Google Maps API v2的SupportMapFragment完全被actionBar覆盖。 我已经做了一些测试:加载一个不同的片段,例如一个简单的SherlockListFragment,但结果完全相同,并且不要设置setListNavigationCallbacks(因为问题可能是我的自定义SpinnerAdapter)但actionBar总是涵盖所有屏幕,即使没有任何文字。

图片: https : //www.dropbox.com/s/y0lnekjttdzv2xa/2012-12-18_14-45-43.png

我的应用中的一些代码:

Main.java

public class Main extends SherlockFragmentActivity implements ActionBar.OnNavigationListener { private static final String STATE_SELECTED_NAVIGATION_ITEM = "selected_navigation_item"; private FragmentMappa fMappa; private FragmentLinee fLinee; private FragmentAtmInforma fAtm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); fMappa = new FragmentMappa(); fLinee = new FragmentLinee(); fAtm = new FragmentAtmInforma(); setContentView(R.layout.activity_main); int IdFixedHeader = -1; Utils.ImpostaActionBar(IdFixedHeader, this); getSupportFragmentManager().addOnBackStackChangedListener(getListener()); getSupportFragmentManager().beginTransaction().replace(R.id.MainContainer, fMappa).commit(); new downloadUtils().execute(0, this, true); }

Utils.java

public static void ImpostaActionBar(int IdFixedHeader, SherlockFragmentActivity Act, String StrFixHead) { // Set up the action bar to show a dropdown list. ActionBar actionBar = Act.getSupportActionBar(); actionBar.setDisplayShowTitleEnabled(false); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); ArrayList<VoceListaMenuNav> Voci = new ArrayList<VoceListaMenuNav>(); Voci.add(new VoceListaMenuNav(Act.getString(R.string.title_mappa), R.drawable.btn_show_map)); Voci.add(new VoceListaMenuNav(Act.getString(R.string.title_linee), R.drawable.btn_compass_tilt)); Voci.add(new VoceListaMenuNav(Act.getString(R.string.title_percorso), R.drawable.fer)); Voci.add(new VoceListaMenuNav(Act.getString(R.string.title_preferiti), R.drawable.btn_show_map)); Voci.add(new VoceListaMenuNav(Act.getString(R.string.title_AtmInforma), R.drawable.btn_show_map)); // Set up the dropdown list navigation in the action bar. actionBar.setListNavigationCallbacks(new AdapterListaMenuNav(Act.getSupportActionBar().getThemedContext(), Voci, IdFixedHeader, StrFixHead), (OnNavigationListener) Act); actionBar.setSelectedNavigationItem(IdFixedHeader); }

styles.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="AppTheme" parent="Theme.Sherlock.Light.DarkActionBar"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> <item name="android:windowActionBarOverlay">true</item> <item name="android:windowActionModeOverlay">true</item> <item name="android:actionBarStyle">@style/ActionBar</item> </style> <color name="GrigioSemiTrasp">#af000000</color> <style name="ActionBar" parent="Widget.Sherlock.Light.Spinner.DropDown.ActionBar"> <item name="android:background">@color/GrigioSemiTrasp</item> </style> </resources>

我的定制适配器:

public class AdapterListaMenuNav extends BaseAdapter { @Override public View getView(int arg0, View arg1, ViewGroup parent) { View rowView = arg1; if (rowView == null) { rowView = inflater.inflate(R.layout.list_item_menu_nav_top, null); ViewHolderListaGenerica viewHolder = new ViewHolderListaGenerica(); viewHolder.Titolo = (TextView) rowView.findViewById(R.id.ListaMenuNavTitolo); rowView.setTag(viewHolder); } if (FixedHeader == -1) { ViewHolderListaGenerica holder = (ViewHolderListaGenerica)rowView.getTag(); VoceListaMenuNav f = LisVoci.get(arg0); holder.Titolo.setText(f.Titolo); return rowView; } else { ViewHolderListaGenerica holder = (ViewHolderListaGenerica)rowView.getTag(); VoceListaMenuNav f = LisVoci.get(FixedHeader); holder.Titolo.setText(f.Titolo); return rowView; } } Context Ctx; ArrayList<VoceListaMenuNav> LisVoci; LayoutInflater inflater; int FixedHeader; public AdapterListaMenuNav(Context Cont, ArrayList<VoceListaMenuNav> ListaVoci, int IdFixedHeader, String StrFxHeader) { LisVoci = ListaVoci; inflater = (LayoutInflater)Cont.getSystemService(Context.LAYOUT_INFLATER_SERVICE); Ctx = Cont; FixedHeader = IdFixedHeader; } @Override public int getCount() { return LisVoci.size(); } @Override public Object getItem(int arg0) { return null; } @Override public long getItemId(int arg0) { return 0; } @Override public View getDropDownView(int arg0, View arg1, ViewGroup arg2) { View rowView = arg1; if (rowView == null) { rowView = inflater.inflate(R.layout.list_item_menu_nav, null); ViewHolderListaGenerica viewHolder = new ViewHolderListaGenerica(); viewHolder.Titolo = (TextView) rowView.findViewById(R.id.ListaMenuNavTitolo); viewHolder.Immagine = (ImageView) rowView.findViewById(R.id.ListaMenuNavImage); rowView.setTag(viewHolder); } ViewHolderListaGenerica holder = (ViewHolderListaGenerica)rowView.getTag(); VoceListaMenuNav f = LisVoci.get(arg0); holder.Titolo.setText(f.Titolo); holder.Immagine.setImageResource(f.IdImage); return rowView; } }

I have just implemented in my Android Application the Sherlock's ActionBar.

The issue is: as you can see from image, my SupportMapFragment of Google Maps API v2, loaded in the MainActivity, is completely overlayed by the actionBar. I have already done some tests: load a different fragment, for example a simple SherlockListFragment, but the result is absolutely the same, and to DON'T set the setListNavigationCallbacks (beacuse the problem could be my custom SpinnerAdapter) but the actionBar always covers all the screen, even without any text in it.

IMAGE: https://www.dropbox.com/s/y0lnekjttdzv2xa/2012-12-18_14-45-43.png

Some Code from my app:

Main.java

public class Main extends SherlockFragmentActivity implements ActionBar.OnNavigationListener { private static final String STATE_SELECTED_NAVIGATION_ITEM = "selected_navigation_item"; private FragmentMappa fMappa; private FragmentLinee fLinee; private FragmentAtmInforma fAtm; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); fMappa = new FragmentMappa(); fLinee = new FragmentLinee(); fAtm = new FragmentAtmInforma(); setContentView(R.layout.activity_main); int IdFixedHeader = -1; Utils.ImpostaActionBar(IdFixedHeader, this); getSupportFragmentManager().addOnBackStackChangedListener(getListener()); getSupportFragmentManager().beginTransaction().replace(R.id.MainContainer, fMappa).commit(); new downloadUtils().execute(0, this, true); }

Utils.java

public static void ImpostaActionBar(int IdFixedHeader, SherlockFragmentActivity Act, String StrFixHead) { // Set up the action bar to show a dropdown list. ActionBar actionBar = Act.getSupportActionBar(); actionBar.setDisplayShowTitleEnabled(false); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); ArrayList<VoceListaMenuNav> Voci = new ArrayList<VoceListaMenuNav>(); Voci.add(new VoceListaMenuNav(Act.getString(R.string.title_mappa), R.drawable.btn_show_map)); Voci.add(new VoceListaMenuNav(Act.getString(R.string.title_linee), R.drawable.btn_compass_tilt)); Voci.add(new VoceListaMenuNav(Act.getString(R.string.title_percorso), R.drawable.fer)); Voci.add(new VoceListaMenuNav(Act.getString(R.string.title_preferiti), R.drawable.btn_show_map)); Voci.add(new VoceListaMenuNav(Act.getString(R.string.title_AtmInforma), R.drawable.btn_show_map)); // Set up the dropdown list navigation in the action bar. actionBar.setListNavigationCallbacks(new AdapterListaMenuNav(Act.getSupportActionBar().getThemedContext(), Voci, IdFixedHeader, StrFixHead), (OnNavigationListener) Act); actionBar.setSelectedNavigationItem(IdFixedHeader); }

styles.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="AppTheme" parent="Theme.Sherlock.Light.DarkActionBar"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> <item name="android:windowActionBarOverlay">true</item> <item name="android:windowActionModeOverlay">true</item> <item name="android:actionBarStyle">@style/ActionBar</item> </style> <color name="GrigioSemiTrasp">#af000000</color> <style name="ActionBar" parent="Widget.Sherlock.Light.Spinner.DropDown.ActionBar"> <item name="android:background">@color/GrigioSemiTrasp</item> </style> </resources>

My custom adapter:

public class AdapterListaMenuNav extends BaseAdapter { @Override public View getView(int arg0, View arg1, ViewGroup parent) { View rowView = arg1; if (rowView == null) { rowView = inflater.inflate(R.layout.list_item_menu_nav_top, null); ViewHolderListaGenerica viewHolder = new ViewHolderListaGenerica(); viewHolder.Titolo = (TextView) rowView.findViewById(R.id.ListaMenuNavTitolo); rowView.setTag(viewHolder); } if (FixedHeader == -1) { ViewHolderListaGenerica holder = (ViewHolderListaGenerica)rowView.getTag(); VoceListaMenuNav f = LisVoci.get(arg0); holder.Titolo.setText(f.Titolo); return rowView; } else { ViewHolderListaGenerica holder = (ViewHolderListaGenerica)rowView.getTag(); VoceListaMenuNav f = LisVoci.get(FixedHeader); holder.Titolo.setText(f.Titolo); return rowView; } } Context Ctx; ArrayList<VoceListaMenuNav> LisVoci; LayoutInflater inflater; int FixedHeader; public AdapterListaMenuNav(Context Cont, ArrayList<VoceListaMenuNav> ListaVoci, int IdFixedHeader, String StrFxHeader) { LisVoci = ListaVoci; inflater = (LayoutInflater)Cont.getSystemService(Context.LAYOUT_INFLATER_SERVICE); Ctx = Cont; FixedHeader = IdFixedHeader; } @Override public int getCount() { return LisVoci.size(); } @Override public Object getItem(int arg0) { return null; } @Override public long getItemId(int arg0) { return 0; } @Override public View getDropDownView(int arg0, View arg1, ViewGroup arg2) { View rowView = arg1; if (rowView == null) { rowView = inflater.inflate(R.layout.list_item_menu_nav, null); ViewHolderListaGenerica viewHolder = new ViewHolderListaGenerica(); viewHolder.Titolo = (TextView) rowView.findViewById(R.id.ListaMenuNavTitolo); viewHolder.Immagine = (ImageView) rowView.findViewById(R.id.ListaMenuNavImage); rowView.setTag(viewHolder); } ViewHolderListaGenerica holder = (ViewHolderListaGenerica)rowView.getTag(); VoceListaMenuNav f = LisVoci.get(arg0); holder.Titolo.setText(f.Titolo); holder.Immagine.setImageResource(f.IdImage); return rowView; } }

最满意答案

我努力找到任何东西,最后可以自己回答。 问题来自于ABS风格的继承。 正确的代码是:

<style name="ActionBar" parent="Widget.Sherlock.Light.ActionBar"> .... </style>

I struggled to find out anything and finally can answer myself. The problem was from WHAT the ABS style was inheriting from. The correct code is:

<style name="ActionBar" parent="Widget.Sherlock.Light.ActionBar"> .... </style>

更多推荐

本文发布于:2023-07-15 05:43:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1110756.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:屏幕   Sherlock   ActionBar   covers   screen

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!