如何在android中创建自定义actionbar?
我想在android中创建自定义actionbar, 这是我的简单代码:如何在android中创建自定义actionbar?,android,menu,android-actionbar,Android,Menu,Android Actionbar,我想在android中创建自定义actionbar, 这是我的简单代码: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
menubar();
}
public void menubar(){
ActionBar mActionBar = getActionBar();
LayoutInflater inflater = getLayoutInflater();
View mCustomView = inflater.inflate(R.layout.menu_bar, null);
ImageButton button = (ImageButton) mCustomView.findViewById(R.id.bt_menu);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getApplicationContext(), "Clicked!",Toast.LENGTH_LONG).show();
}
});
mActionBar.setCustomView(mCustomView);
mActionBar.setDisplayShowCustomEnabled(true);
}
}
但运行时会显示如下错误:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setCustomView(android.view.View)' on a null object reference
at dot.com.coba.MainActivity.menubar(MainActivity.java:39)
at dot.com.coba.MainActivity.onCreate(MainActivity.java:21)
您的getActionBar()
方法返回null,因此请尝试使用getSupportActionBar()
如下:
ActionBar mActionBar = getSupportActionBar();
首先,请阅读Android开发者的博客帖子。注意,现在应该使用
工具栏
而不是操作栏
在这个版本中,Android引入了一个新的工具栏小部件这是一个 动作条模式的泛化,为您提供了更多 控制和灵活性。工具栏是层次结构中的一个视图,就像 任何其他,使其更容易与您的其他系统交叉 查看,设置动画,并对滚动事件做出反应。您也可以设置它 作为您活动的操作栏,意味着您的标准选项菜单 操作将显示在其中 换句话说,
ActionBar
现在变成了一种特殊的工具栏
。这是一篇文章的摘录
应用程序栏,以前在Android中称为操作栏,是一种特殊的工具栏,用于品牌、导航、搜索和操作
如何在项目中设置工具栏?
1)。在
build.gradle
文件中:
compile 'com.android.support:appcompat-v7:22.2.0'
2)。从AppCompatActivity
扩展您的活动:
public class MyActivity extends AppCompatActivity{
@Override
public void setContentView(int layoutResID) {
super.setContentView(layoutResID);
getActionBarToolbar();
}
3)。以活动的类成员身份创建指向工具栏的链接
,或使用视图持有者
模式:
public class MyActivity extends AppCompatActivity{
//Some code
private Toolbar mActionBarToolbar;
//Some code
}
4)。在MyActivity
protected Toolbar getActionBarToolbar() {
if (mActionBarToolbar == null) {
mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
if (mActionBarToolbar != null) {
setSupportActionBar(mActionBarToolbar);
}
}
return mActionBarToolbar;
}
5)。覆盖MyActivity
的方法setContentView
:
public class MyActivity extends AppCompatActivity{
@Override
public void setContentView(int layoutResID) {
super.setContentView(layoutResID);
getActionBarToolbar();
}
6)。创建文件res/layout/toolbar\u actionbar.xml
:
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto"
myapp:theme="@style/ActionBarThemeOverlay"
myapp:popupTheme="@style/ActionBarPopupThemeOverlay"
android:id="@+id/toolbar_actionbar"
android:background="@null"
myapp:titleTextAppearance="@style/ActionBar.TitleText"
android:layout_width="match_parent"
android:layout_height="?actionBarSize" />
<include layout="@layout/toolbar_actionbar" />
8)。运行项目。如果要创建自己的操作栏,请隐藏默认的操作栏。把这条线放在你的活动中
getSupportActionBar().hide();
并在Xml文件中创建您自己的布局,就像我在下面创建的一样
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimaryDark"
android:gravity="center"
android:orientation="horizontal">
<ImageButton
android:id="@+id/ibBack"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerVertical="true"
android:background="@android:color/transparent"
android:padding="15dp"
android:src="@drawable/back_1"
android:visibility="visible" />
<TextView
style="?android:textAppearanceLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:padding="10sp"
android:id="@+id/tvTitle"
android:text="Activity name"
android:textColor="@color/whiteColor"
android:textStyle="normal" />
</RelativeLayout>
</LinearLayout>
现在,只需将标题设置为您的需求,您就可以在imagebutton click listner中轻松调用backpress事件
听起来很简单!哈我试着这样做,但无法工作,无法解析方法“getsupportActionBar”
mContext = mAppCompatActivity.getBaseContext();
ActionBar mActionBar = mAppCompatActivity.getSupportActionBar();
ActionBar.LayoutParams mParams = new ActionBar.LayoutParams(
ActionBar.LayoutParams.MATCH_PARENT,
ActionBar.LayoutParams.MATCH_PARENT);
mFrameLayout = new FrameLayout(mContext);
mFrameLayout.setLayoutParams(mParams);
if (mActionBar != null) {
mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
mActionBar.setDisplayShowCustomEnabled(true);
mActionBar.setDisplayShowTitleEnabled(false);
mActionBar.setCustomView(mFrameLayout);
Toolbar mToolbar = (Toolbar) mFrameLayout.getParent();
mToolbar.setPadding(0, 0, 0, 0);
mToolbar.setContentInsetsAbsolute(0, 0);
}