Та же панель инструментов для всех видов деятельности - что-то мне не хватает - PullRequest
0 голосов
/ 30 июня 2018

Что я хочу: Я хочу сохранить одну и ту же панель инструментов для всех моих действий.

Что я пробовал: Я сделал BaseActivity и у меня в нем есть панель инструментов. Я расширяю другие виды деятельности на BaseActivity.

В чем проблема: Когда я запускаю приложение. Я не нахожу панель инструментов для других действий.

Ниже мой код.

BaseActivity.java

    public class BaseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);
        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.toolbar_menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()){
            case R.id.menu_lang_english:
                Toast.makeText(this, "English", Toast.LENGTH_SHORT).show();
                break;

            case R.id.menu_lang_french:
                Toast.makeText(this, "French", Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

activity_base.xml

    <?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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"
    tools:context=".BaseActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

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

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

MainActivity.java

    public class MainActivity extends BaseActivity {

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

activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

</LinearLayout>

styles.xml

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- 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" />

AndroidManifest.xml

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

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

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".BaseActivity"
        android:label="@string/title_activity_base"
        android:theme="@style/AppTheme.NoActionBar"></activity>
</application>

OutPut я получаю

Output Image

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Один из способов сделать это - добавить Framelayout в вашем activity_base.xml. Этот макет будет заполнителем для размещения ваших конкретных экранов. Следовательно, все ваши конкретные экраны будут иметь одинаковую панель инструментов и внешний вид.

Теперь с ваших конкретных экранов вы НЕ будете звонить на setContentView(). Вместо этого назовите что-то вроде putContentViewInTemplate(R.layout.activity_main.xml);. Это заменит content_frame в шаблоне фактическим экраном. Вот простая реализация,

protected void putContentViewInTemplate(int id) {
    mRootTemplate = (ViewGroup)findViewById(R.id.content_frame);
    mRootTemplate.addView(getViewFromLayout(id), 0);
}

Обратите внимание, что вы подключаете макет вашего экрана к основному шаблону, который является вашим activity_base.xml. Конечно, вам нужно добавить content_frame в activity_base.xml.

<FrameLayout app:layout_behavior="@string/appbar_scrolling_view_behavior"
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
0 голосов
/ 30 июня 2018

на экране одновременно может быть только один макет. MainActivity setContentView () имеет значение Override.

Вы можете использовать Фрагмент вместо Activtiy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...