我正在构建一个具有1个操作栏的非常简单的应用程序。我正在使用AppCompat库以模糊统一的方式支持Android 2.1或更高版本。
我正在遵循Google指南,变得有些困惑。我有点菜鸟,所以请忍受我:)
我的主类扩展了Activity,所以我创建了一个扩展ActionBarActivity的新类。
package com.example.simpledice;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
public class DiceActionBar extends ActionBarActivity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dice_action_bar);
ActionBar actionBar = getSupportActionBar();
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.dice_action_bar, menu);
return true;
}
}
然后我像这样添加它:
public class MainActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DiceActionBar diceActionBar = new DiceActionBar();
这确实可以编译和部署,但没有操作栏。我也尝试过使用片段进行类似的操作,但没有任何乐趣(甚至无法编译它们!)。我只在动作栏上添加了一个项目,所以它看起来确实有些过大。
谁能告诉我我要去哪里错了?
编辑
根据Tanis.7x答案更新了代码。不幸的是,ActionBar仍然没有显示。更新的代码:
public class MainActivity extends ActionBarActivity
{
private ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar = getSupportActionBar();
actionBar.show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
}
表现:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.simpledice"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.DarkActionBar"
android:uiOptions="splitActionBarWhenNarrow">
<activity
android:name="com.example.simpledice.MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.Light.DarkActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
RES /菜单/ main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/action_search"
android:icon="@drawable/mute"
android:title="@string/muteOption"
android:showAsAction="ifRoom"
/>
</menu>
最佳答案
正如您从ActionBarActivity documentation中看到的,ActionBarActivity是一个Activity。简单地创建一个新的活动并没有任何作用您需要启动新的DiceActionBar
活动,或更改使用ActionBarActivity的方式。
在这种情况下,您需要更改MainActivity以扩展ActionBarActivity而不是Activity。
因此,MainActivity应该如下所示:
public class MainActivity extends ActionBarActivity {
// The rest of your MainActivity code
}
关于android - 如何使用AppCompat在Android中的单独类中添加ActionBar?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17928948/