繁体   English   中英

如何设置ActionBar中的后退按钮?

[英]How to set up the Back button in the ActionBar?

我的代码中有这个问题,我无法在ActionBar中设置后退按钮。 我在AndroidManifest中指定AProposActivity是MainActivity的子活动,但我有java.lang.NullPointerException. 有我的代码java:

 public class AProposActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_apropos);

    getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);
}
}

和我的xml文件:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.emi.integre.projet.dentistterms.AProposActivity">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/apropos1"
    android:id="@+id/textView3"
    android:layout_above="@+id/textView4"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginBottom="42dp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/apropos2"
    android:id="@+id/textView4"
    android:layout_centerVertical="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/name1"
    android:id="@+id/textView5"
    android:layout_below="@+id/textView4"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginRight="24dp"
    android:layout_marginLeft="24dp"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/name2"
    android:id="@+id/textView6"
    android:layout_below="@+id/textView5"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginRight="24dp"
    android:layout_marginLeft="24dp"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/name3"
    android:id="@+id/textView7"
    android:layout_below="@+id/textView6"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginRight="24dp"
    android:layout_marginLeft="24dp"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/name4"
    android:id="@+id/textView8"
    android:layout_below="@+id/textView7"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginRight="24dp"
    android:layout_marginLeft="24dp"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/apropos4"
    android:id="@+id/textView9"
    android:layout_marginBottom="56dp"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginRight="12dp"
    android:layout_marginLeft="12dp"/>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/apropos3"
    android:id="@+id/textView11"
    android:layout_above="@+id/textView10"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/name5"
    android:id="@+id/textView10"
    android:layout_above="@+id/textView9"
    android:layout_alignLeft="@+id/textView8"
    android:layout_alignStart="@+id/textView8" />

还有我的AndroidManifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.emi.integre.projet.dentistterms">

<application
    android:allowBackup="true"
    android:icon="@drawable/logo"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity android:name=".AcceuilActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".ResultActivity"
        android:label="Voici le terme dans les 3 langues"
        android:parentActivityName=".MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.emi.integre.projet.dentistterms.MainActivity" />
    </activity>
    <activity
        android:name=".SearchActivity"
        android:label="Rechercher un terme"
        android:parentActivityName=".MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.emi.integre.projet.dentistterms.MainActivity" />
    </activity>

    <activity android:name=".AProposActivity" android:label="A Propos"
        android:parentActivityName=".MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.emi.integre.projet.dentistterms.MainActivity"/>
    </activity>

</application>

这里也是我的styles.xml文件:

<resources xmlns:tools="http://schemas.android.com/tools">


<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:colorBackground">@color/background_material_light</item>
    <item name="android:textColorPrimary">@android:color/black</item>
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
    <item name="android:windowTranslucentStatus" tools:targetApi="21">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:navigationBarColor" tools:targetApi="21">@color/navigationBarColor
    </item>
    <item name="android:windowDrawsSystemBarBackgrounds" tools:targetApi="21">true</item>
</style>

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="spinBars">true</item>
    <item name="color">@color/drawerArrowColor</item>
</style>

当您在AndroidManifest.xml中为您的应用程序设置android:theme="@style/AppTheme.NoActionBar"ActionBar将不会被夸大。 您可以使用ToolBar ,在布局中声明它并调用它

 setSupportActionBar((ToolBar) findViewById(R.id.toolBar)); 

在任何getSupportActionBar()调用之前,或使用具有ActionBar支持的theme更改theme

第1步:创建一个xml ,其toolbar名称为toolbar_layout

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

第2步:您必须在活动布局中添加上述工具栏,您可以按如下方式将其包括在内:

<LinearLayout
  android:id="@+id/container_toolbar"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical">

 <include
  android:id="@+id/toolbar"
  layout="@layout/toolbar" />
</LinearLayout>

第3步:onCreate()方法中进行如下更改:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_apropos);

    ToolBar toolbar = (ToolBar) findViewById(R.id.toolBar)
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    //your code here
}

第4步:onOptionsItemSelected()检查id,如下所示:

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if(id == android.R.id.home){
            //onBackPressed();  //you can call this directly 
                      //OR
            //your code implementation if any 
        }
        return super.onOptionsItemSelected(item);
    }

如果您使用默认的ActionBar然后使用,

ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);

并在onOptionItemSelected(MenuItem item)方法中添加以下代码行

case android.R.id.Home :
       this.finish();
       return true;

尝试这个

public void enableActionBarHomeButton(AppCompatActivity appCompatActivity){
    android.support.v7.app.ActionBar mActionBar = appCompatActivity.getSupportActionBar();
    mActionBar.setHomeButtonEnabled(true);
    mActionBar.setDisplayHomeAsUpEnabled(true);
}

然后进行如下函数调用

enableActionBarHomeButton(this);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM