Повторно используйте панель действий во всех действиях приложения.

Я новичок в Android, и мне было интересно, может ли кто-нибудь рассказать мне, как повторно использовать панель действий во всех моих действиях Android. Насколько я изучил, я обнаружил, что нам нужно создать класс BaseActivity и расширить его в нашей деятельности, где мы хотим его повторно использовать, а также мы должны создать макет xml и включить его в наш XML-файл активности. Я закончил с частью BaseActivity. Теперь я немного запутался в создании части xml и включении ее. Я знаю, как объединить и включить макет, но в случае с панелью действий, какие необходимые шаги необходимо предпринять. Любая помощь будет оценена по достоинству.

Это моя BaseMenuActivity:

public class BaseMenuActivity extends Activity{

    ActionBar actionBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowCustomEnabled(true);
        actionBar.setIcon(R.drawable.ic_social_share);
        LayoutInflater inflator = (LayoutInflater) this
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflator.inflate(R.layout.apptitle, null);
        actionBar.setDisplayShowTitleEnabled(false);
        actionBar.setCustomView(v);
    }
}

Часть манифеста для того же самого:

<activity
            android:name="com.example.travelplanner.MenuActivity"
            android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden"
            android:uiOptions="splitActionBarWhenNarrow"
            android:label="WeTrip"
            android:theme="@style/MyTheme" >

Часть Style.xml:

<style name="MyTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
    </style>
    <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">#F0F1F1</item>
        <item name="android:backgroundSplit">#000000</item>
    </style>

MenuActivity.java

public class MenuActivity extends BaseMenuActivity implements OnItemClickListener{

    ActionBar actionBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_menu);

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu, menu);
        SearchView searchView = (SearchView) menu.findItem(R.id.menu_action_search).getActionView();
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch(item.getItemId()){
            case R.id.menu_action_search:
            {}
            case R.id.menu_action_locate:
            {}
            case R.id.menu_action_mail:
            {}
            case R.id.menu_action_call:
            {}
        }
        return super.onOptionsItemSelected(item);
    }

}

person divyang7    schedule 26.07.2013    source источник
comment
так что, если я правильно вас понимаю, вы просто хотите, чтобы в вашем приложении была одна и та же панель действий?   -  person tyczj    schedule 26.07.2013
comment
да .. но я не знаю, как этого добиться правильно. Потому что я знаю, что мне нужно создать класс BaseActivity и расширить его, а также мне нужно создать файл xml и включить его в каждое действие, которое я хочу отображать на одной и той же панели действий... но мне нужно некоторое руководство по этому поводу.   -  person divyang7    schedule 26.07.2013
comment
вы можете просто установить тему приложения в своем манифесте, чтобы вам не нужно было устанавливать ее для каждого отдельного действия в вашем манифесте. Однако вам нужно будет дать ему представление в каждом действии. Если вы не хотите этого делать, я предлагаю посмотреть на переключение фрагментов вместо действий.   -  person tyczj    schedule 26.07.2013
comment
Ваш код выглядит хорошо. Вы пробовали? Это не работает?   -  person Benito Bertoli    schedule 26.07.2013
comment
будет ли приведенный выше код работать... или его нужно улучшить... и я объявил часть темы в style.xml.. установив тему приложения, вы имеете в виду, что я должен установить тему приложения как android:theme= @стиль/моя тема ?   -  person divyang7    schedule 26.07.2013
comment
Нет, я думал, что это неполно, так как я не имел дело с макетом xml. В некоторых учебниках предлагалось иметь XML-макет для панели действий и включать его в XML-файл действия. Я не уверен, как с этим бороться..   -  person divyang7    schedule 26.07.2013
comment
@divyang7 yes в теге вашего приложения установите android:theme="@style/MyTheme", тогда все ваше приложение будет использовать эту тему   -  person tyczj    schedule 26.07.2013


Ответы (1)


Что ж, ваш код выглядит хорошо, но если вы хотите повторно использовать точно такой же ActionBar с теми же значками и меню и, как правило, с той же функциональностью в каждом действии.

Вы можете добавить код:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu, menu);
        SearchView searchView = (SearchView) menu.findItem(R.id.menu_action_search).getActionView();
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        switch(item.getItemId()){
            case R.id.menu_action_search:
            {}
            case R.id.menu_action_locate:
            {}
            case R.id.menu_action_mail:
            {}
            case R.id.menu_action_call:
            {}
        }
        return super.onOptionsItemSelected(item);
    }

в вашем классе BaseMenuActivity, и ваша панель действий будет заполняться одинаково для каждого действия, которое происходит от него.

Обновлять:

Чтобы создать макет меню, вы должны создать папку «меню» в папке ресурсов res/menu. Затем создайте файл xml внутри с именем: some_title.xml.

Типичный пример XML-файла меню выглядит следующим образом:

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

    <item
        android:id="@+id/menu_search"
        android:actionViewClass="com.actionbarsherlock.widget.SearchView"
        android:icon="@drawable/abs__ic_search"
        android:showAsAction="ifRoom|withText|collapseActionView"
        android:title="@string/menu_action_search"/>
    <item
        android:id="@+id/menu_sort"
        android:icon="@drawable/content_sort_icon"
        android:showAsAction="always"
        android:title="@string/menu_action_sort">
    </item>

</menu>

а затем раздуйте этот файл:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.some_title, menu);
        SearchView searchView = (SearchView) menu.findItem(R.id.menu_action_search).getActionView();
        return true;
    }

Для дальнейшего чтения этот учебник очень хорош при использовании ActionBar:

http://www.vogella.com/tutorials/AndroidActionBar/article.html

person Manolis Proimakis    schedule 26.07.2013
comment
Спасибо .. Нет необходимости создавать и включать другой макет xml для панели действий ... Можно ли это сделать, используя только часть java .. - person divyang7; 26.07.2013
comment
как разместить прозрачную панель действий для всех действий. У меня есть несколько экранов с полноэкранным режимом, а также интегрировать анимацию android-flip для анимации скручивания страницы, для этого мне нужно разместить панель действий. z-index вверху, как в ios. Пожалуйста, помогите для справки Приложение новостей Индии - person Harsha; 10.07.2015
comment
@ManosProm Если я хочу использовать один и тот же onOptionsItemSelected для всех действий приложения. Как я могу это сделать, или мне нужно написать один и тот же код для каждого представления. - person Shuddh; 25.07.2016