getActionBar不能使用AppCompat lib

时间:2016-01-28 06:26:14

标签: android intellij-idea material-design android-appcompat android-actionbar-compat

我正在尝试使用Intellij IdeaAppCompat v7 library创建一个TabLayout Android应用。

import android.support.v7.app.ActionBar;

public class MainActivity extends FragmentActivity implements TabListener { 
...
private ActionBar actionBar;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
actionBar = getActionBar(); //Error line
...

}

使用getActionBar()时,我收到此错误:

  

不兼容类型:

     

必需:android.support.v7.app.ActionBar

     

发现:android.app.ActionBar

我的活动中没有import android.app.ActionBar;。 我试过了:

actionBar = android.support.v7.app.ActionBar.getActionBar();

actionBar = getSupportActionBar();

但是我得到了

  

无法解析方法getActionBar()//或getSupportActionBar()

如何使用appCompat库使用getActionBar()(或许还有一个我不知道的替代方案?)

修改

我还在此行中将FragmentActivity替换为ActionBarActivity

 public class MainActivity extends FragmentActivity //ActionBarActivity

但没有运气

3 个答案:

答案 0 :(得分:3)

不良方法

调用较旧的import android.support.v7.app.ActionBar;

如果您正在扩展 AppCompatActivity / FragmentActivity ,那么您将为较旧的Android版本提供后向支持,为此您必须使用getSupportActionBar()

阅读 getSupportActionBar using FragmentActivity

public class MainActivity extends AppCompatActivity {
  // ...

  ....

 ActionBar actionBar =getSupportActionBar();
}

添加此内容。

dependencies {
   // … 
   compile 'com.android.support:appcompat-v7:23.1.0'
}

检查 Activity, AppCompatActivity, FragmentActivity, and ActionBarActivity: When to Use Which?

  

AppCompatActivity来自appcompat-v7库。主要是这个   提供动作栏的后退。由于本机动作栏是   在API级别11中添加,您不需要AppCompatActivity。

对于 Information How do I add a library (android-support-v7-appcompat) in IntelliJ IDEA

答案 1 :(得分:3)

首先,您必须扩展AppCompatActivity而不是FragmentActivity

然后您可以使用getSupportActionBar()

要执行此操作,只需导入正确的依赖项:

compile 'com.android.support:appcompat-v7:23.1.1'

但是,非常重要的是,TabListener 是获取标签布局的错误方法此级别在API级别21中已弃用。

现在使用新的设计支持库,您可以使用新的TabLayout

只需将此依赖项添加到build.gradle

即可
compile 'com.android.support:design:23.1.1'

代码非常简单:

TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);

要实现材料设计的许多功能,您应该在a。中使用它 CoordinatorLayoutAppBarLayout

这样的事情:

 <android.support.design.widget.CoordinatorLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
         android:layout_width="match_parent"
         android:layout_height="match_parent">


     <android.support.design.widget.AppBarLayout
             android:layout_height="wrap_content"
             android:layout_width="match_parent">

         <android.support.v7.widget.Toolbar
                 ...
                 app:layout_scrollFlags="scroll|enterAlways"/>

         <android.support.design.widget.TabLayout
                 ...
                 app:layout_scrollFlags="scroll|enterAlways"/>

     </android.support.design.widget.AppBarLayout>

     <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

 </android.support.design.widget.CoordinatorLayout>

答案 2 :(得分:0)

更改您的导入

import android.support.v7.app.ActionBar;

insted of

import android.app.ActionBar;

并使用

public class MainActivity extends AppCompatActivity {
   // ...
}