操作栏setDisplayHomeAsUpEnabled关闭应用程序

时间:2014-02-24 16:49:46

标签: android android-actionbar

我的应用使用android.support.v7.app.ActionBar,因此我可以使用Android 2.3.4手机上的操作栏和使用Android 4.4.2的平板电脑。我已将我的最小和目标SDK设置为10和18.当我单击操作栏上的后退按钮调用setDisplayHomeAsUpEnabled(true)时,它在2.3.4手机上正常工作并返回到名为{的主页活动{1}}。但是,当我单击平板电脑上操作栏上的后退按钮时,它会关闭应用程序,就像我单击平板电脑上的后退按钮一样。 LogCat中没有任何内容,所以当单击操作栏Main_Interface按钮时,它应该会关闭应用程序。以下是Manifest中的Activity的样子:

setDisplayHomeAsUpEnabled()

这是除了ActionBar调用之外的所有活动:

<activity
    android:name=".UILNPPager"
    android:configChanges="orientation|screenSize"
    android:label="UILNPPager"
    android:parentActivityName="com.myapp.ktg.Main_Interface"
    android:theme="@style/Theme.Blu_uilpager" >
    <intent-filter>
        <action android:name="com.myapp.ktg.UILNPPAGER" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.myapp.ktg.Main_Interface" />
</activity>

我尝试从清单中接听电话 import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; public class UILNPPager extends ActionBarActivity { private static final String STATE_POSITION = "STATE_POSITION"; DisplayImageOptions options; ViewPager pager; String[] imTitlesStr; String[] imMediumStr; String[] imPriceStr; String[] imageUrls; int pagerPosition; PhotoViewAttacher mAttacher; ActionBar mActionbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.actionbar_uilpager); //--- ViewPager stuff .... //--- END ViewPager stuff /** Getting a reference to action bar of this activity */ getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main_actions, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: NavUtils.navigateUpFromSameTask(this); return true; } return super.onOptionsItemSelected(item); } } ,但这没有效果。它仍然可以在2.3.4手机上正常工作,而不是在4.4.2平板电脑上。

知道为什么它在平板电脑上无法正常工作?

2 个答案:

答案 0 :(得分:1)

请使用AppCompat主题或继承其中一个主题的主题。例如:

  1. @风格/ ThemeAppCompat
  2. @风格/ ThemeAppCompat.Light
  3. @风格/ ThemeAppCompat.Light.DarkActionBar
  4. 我注意到您使用自己的样式主题,您可以从AppCompat主题之一继承主题,如下所示。

    <style name="Theme.Blu_uilpager"
           parent="@style/ThemeAppCompat.Light">
         ....
    </style>
    

    引自官方Android教程https://developer.android.com/training/basics/actionbar/styling.html

      

    注意:如果您使用支持库API作为操作栏,则必须使用(或覆盖)Theme.AppCompat样式系列(而不是API级别11及更高版本中提供的Theme.Holo系列) 。在这样做时,您声明的每个样式属性必须声明两次:一次使用平台的样式属性(android:properties)和一次使用支持库中包含的样式属性(appcompat.R.attr属性 - 上下文这些属性实际上是你的应用程序)。有关详细信息,请参阅以下示例。

答案 1 :(得分:0)

在我的应用中,我使用自己的过渡从活动A转移到活动B.我发现活动A中overridePendingTransition();调用中的调用onPause();打破了{{1调用活动B,其中包含getSupportActionBar().setDisplayHomeAsUpEnabled(true);。因此,在活动A上,我删除了ActionBar方法并在调用活动B的onPause()中调用overridePendingTransition();,如下所示:

Intent

然后在活动B中删除了 Intent miI = new Intent(); miI.setClass(Splash.this, Main_Interface.class); startActivity(miI); overridePendingTransition(R.anim.fadein, R.anim.fadeout); 方法并将onPause();添加到overridePendingTransition(R.anim.fadein, R.anim.fadeout);方法,如下所示:

onCreate();

然后我将 super.onCreate(savedInstanceState); overridePendingTransition(R.anim.fadein, R.anim.fadeout); setContentView(R.layout.mainpage); 调用放在所有其他活动的overridePendingTransition();方法中,就像在Activity B中一样。这样做可以使转换正常工作。为了让onCreate();在我的4.4.2平板电脑上正确返回Main_Interface活动,我只需拨打ActionBar。一切正常!