我是
android的新手,我想知道是否有人可以指导我如何在我的所有
Android活动中重用动作栏.据我所研究,我发现我们必须创建一个BaseActivity类并在我们要重用它的Activity中扩展它,并且我们还必须创建一个xml布局并将其包含在我们的activity xml文件中.我已经完成了BaseActivity部分.现在我对构建xml部分并包含它感到困惑.我知道如何合并并包含布局,但在Action Bar的情况下,需要采取哪些必要步骤.任何帮助,将不胜感激.
这是我的BaseMenuActivity:
public class BaseMenuActivity extends Activity{ ActionBar actionBar; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayShowCustomEnabled(true); actionBar.setIcon(R.drawable.ic_social_share); LayoutInflater inflator = (LayoutInflater) this .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = inflator.inflate(R.layout.apptitle,null); actionBar.setDisplayShowTitleEnabled(false); actionBar.setCustomView(v); } }
清单部分相同:
<activity android:name="com.example.travelplanner.MenuActivity" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden" android:uiOptions="splitActionBarWhenNarrow" android:label="WeTrip" android:theme="@style/MyTheme" >
Style.xml部分:
<style name="MyTheme" parent="@android:style/Theme.Holo.Light"> <item name="android:actionBarStyle">@style/MyActionBar</item> </style> <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> <item name="android:background">#F0F1F1</item> <item name="android:backgroundSplit">#000000</item> </style>
MenuActivity.java
public class MenuActivity extends BaseMenuActivity implements OnItemClickListener{ ActionBar actionBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_menu); @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu,menu); SearchView searchView = (SearchView) menu.findItem(R.id.menu_action_search).getActionView(); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch(item.getItemId()){ case R.id.menu_action_search: {} case R.id.menu_action_locate: {} case R.id.menu_action_mail: {} case R.id.menu_action_call: {} } return super.onOptionsItemSelected(item); } }
解决方法
那么你的代码看起来不错,但如果你想重复使用相同的ActionBar和相同的图标和菜单,并且每个活动通常具有相同的功能.
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu,menu); SearchView searchView = (SearchView) menu.findItem(R.id.menu_action_search).getActionView(); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch(item.getItemId()){ case R.id.menu_action_search: {} case R.id.menu_action_locate: {} case R.id.menu_action_mail: {} case R.id.menu_action_call: {} } return super.onOptionsItemSelected(item); }
在您的BaseMenuActivity类中,您的操作栏将为从其扩展的每个活动填充相同的内容.
更新:
要创建菜单布局,您应该在资源文件夹res / menu中创建一个文件夹“menu”.
然后在里面创建一个名为some_title.xml的xml文件
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_search" android:actionViewClass="com.actionbarsherlock.widget.SearchView" android:icon="@drawable/abs__ic_search" android:showAsAction="ifRoom|withText|collapseActionView" android:title="@string/menu_action_search"/> <item android:id="@+id/menu_sort" android:icon="@drawable/content_sort_icon" android:showAsAction="always" android:title="@string/menu_action_sort"> </item> </menu>
然后膨胀该文件:
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.some_title,menu); SearchView searchView = (SearchView) menu.findItem(R.id.menu_action_search).getActionView(); return true; }
对于更多阅读,本教程非常适合使用ActionBar:
http://www.vogella.com/tutorials/AndroidActionBar/article.html