【问题标题】:Android childs Actionbar remains the same as parent when trying to add UP button尝试添加向上按钮时,Android子操作栏与父操作栏保持不变
【发布时间】:2020-05-20 14:03:54
【问题描述】:

我是 Android 开发的新手,我创建了我的第一个应用程序,其中包括将可滚动的产品列表显示为 ImageView,并且可以通过长按来访问每个产品的详细信息。该应用程序包含三种活动:应用程序开始时的启动活动,显示产品列表的主活动以及每个产品的项目活动。

启动 Activity 没有操作栏,它只有一个背景图像,在应用启动时显示 2 秒。主要活动包含一个标记为“产品”的 ActionBar,而对于每个产品或我称它们为“项目”,它的操作栏应该被标记为“项目 x”。起初它是这样工作的,但是没有返回按钮,这意味着每次我从主 Activity 长按后访问一个 Item 时,我无法返回并且应用程序关闭。

为了解决这个问题,我尝试按照https://developer.android.com/training/appbar/up-action 上的android教程,在操作栏中为每个项目活动添加一个向上按钮,我是这样做的:

在项目的 AndroidManifest.xml 中:

<activity android:name=".Item7Activity" android:parentActivityName="com.example.androtp3.MainActivity"/>

关于项目活动:

    getSupportActionBar().setTitle("Item 7");
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

现在我遇到了一个新问题,项目 ActionBar 上根本没有出现 UP 按钮,并且标题与其父项相同,即主要活动。我不知道问题出在哪里,除了操作栏外,该应用程序正常运行。

这是我的代码的一部分:

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.androtp3">

<application
    android:allowBackup="true"
    android:icon="@mipmap/tp3_app_logo"
    android:label="Products"
    android:roundIcon="@mipmap/tp3_app_logo_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".Item7Activity" android:parentActivityName="com.example.androtp3.MainActivity"/>
    <activity android:name=".Item6Activity" android:parentActivityName="com.example.androtp3.MainActivity"/>
    <activity android:name=".Item5Activity" android:parentActivityName="com.example.androtp3.MainActivity"/>
    <activity android:name=".Item4Activity" android:parentActivityName="com.example.androtp3.MainActivity"/>
    <activity android:name=".Item3Activity" android:parentActivityName="com.example.androtp3.MainActivity"/>
    <activity android:name=".Item2Activity" android:parentActivityName="com.example.androtp3.MainActivity"/>
    <activity android:name=".Item1Activity" android:parentActivityName="com.example.androtp3.MainActivity"/>
    <activity
        android:name=".SplashActivity"
        android:configChanges="orientation|keyboardHidden|screenSize"
        android:label="@string/title_activity_splash"
        android:theme="@style/FullscreenTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".MainActivity" />
</application>

</manifest>

styles.xml:

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</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="FullscreenTheme" parent="AppTheme">
    <item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowBackground">@null</item>
    <item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
    <item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
</style>

<style name="FullscreenActionBarStyle" parent="Widget.AppCompat.ActionBar">
    <item name="android:background">@color/black_overlay</item>
</style>

Item1 活动(代码与其他活动相同):

public class Item1Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_item1);
    getSupportActionBar().setTitle("Item 1");
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

}

项目布局:

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView2"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Item1Activity"
android:orientation="vertical">

<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:contentDescription="@string/item1_desc"
    android:paddingTop="10dp"
    android:src="@drawable/item1"></ImageView>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/prix"
    android:textColor="#E91E63"
    android:textSize="18sp"
    android:textStyle="bold"
    android:paddingTop="10dp"
    android:paddingLeft="10dp"
    android:paddingRight="0dp"
    android:paddingStart="10dp"
    android:paddingEnd="0dp">

</TextView>

<RadioGroup
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:visibility="visible"
    android:paddingLeft="8dp"
    android:paddingRight="0dp"
    android:paddingStart="8dp"
    android:paddingEnd="0dp">

    <RadioButton
        android:id="@+id/radioButton"
        style="@style/Widget.AppCompat.CompoundButton.RadioButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/avecgar"
        android:visibility="visible" />

    <RadioButton
        android:id="@+id/radioButton2"
        style="@style/Widget.AppCompat.CompoundButton.RadioButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/sansgar"
        android:visibility="visible" />

</RadioGroup>

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/description"
    android:textColor="#E91E63"
    android:textSize="18sp"
    android:textStyle="bold"
    android:paddingTop="20dp"
    android:paddingLeft="8dp"
    android:paddingRight="0dp"
    android:paddingStart="8dp"
    android:paddingEnd="0dp"></TextView>

<TextView
    android:id="@+id/textView2"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/item1_desc"
    android:paddingLeft="8dp"
    android:paddingRight="0dp"
    android:paddingStart="8dp"
    android:paddingEnd="0dp"/>

<TextView
    android:id="@+id/textView3"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/livraison"
    android:textColor="#E91E63"
    android:textSize="18sp"
    android:textStyle="bold"
    android:paddingLeft="8dp"
    android:paddingRight="0dp"
    android:paddingStart="8dp"
    android:paddingEnd="0dp"/>

<TextView
    android:id="@+id/textView4"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/livraison_type1"
    android:paddingLeft="8dp"
    android:paddingRight="0dp"
    android:paddingStart="8dp"
    android:paddingEnd="0dp"/>

<TextView
    android:id="@+id/textView5"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/garantie"
    android:textColor="#E91E63"
    android:textSize="18dp"
    android:textStyle="bold"
    android:paddingLeft="8dp"
    android:paddingRight="0dp"
    android:paddingStart="8dp"
    android:paddingEnd="0dp"/>

<TextView
    android:id="@+id/textView6"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingStart="8dp"
    android:paddingLeft="8dp"
    android:paddingEnd="0dp"
    android:paddingRight="0dp"
    android:text="@string/garantie1" />

<TextView
    android:id="@+id/textView7"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingStart="8dp"
    android:paddingLeft="8dp"
    android:paddingEnd="0dp"
    android:paddingRight="0dp"
    android:text="@string/lien"
    android:textColor="#E91E63"
    android:textSize="18sp"
    android:textStyle="bold" />

<TextView
    android:id="@+id/textView8"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingStart="8dp"
    android:paddingLeft="8dp"
    android:paddingEnd="0dp"
    android:paddingRight="0dp"
    android:selectAllOnFocus="false"
    android:text="@string/lien1"
    android:textColor="#E91E63"
    />


</LinearLayout>
</ScrollView>

我认为问题可能出在其中一个 xml 文件中。

【问题讨论】:

    标签: java android android-actionbar


    【解决方案1】:

    返回按钮:

        getSupportActionBar().setTitle("Item7");     
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    

    还需要重写一些函数:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return super.onCreateOptionsMenu(menu);
    }
    
    
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            onBackPressed();
        }
        return super.onOptionsItemSelected(item);
    }
    

    【讨论】:

    • 我尝试了代码但不起作用,活动上的操作栏仍然带有标签“产品”(应用标签)并且没有返回按钮。
    • 请添加活动代码和布局,以便我弄清楚.. 出了什么问题
    • 我通过添加活动的布局更新了我的帖子,还有什么其他的吗?顺便说一下,帖子中项目活动的 java 是旧的,因为通过添加您提出的说明,它并没有改变
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多