Как добавить любой вид (Button, TextView, Spinner) в качестве пункта меню в ActionBar с использованием Java в Android Studio?

#android #android-actionbar

#Android #android-actionbar

Вопрос:

Я хочу добавить любое представление, такое как Button, TextView или Spinner, в мою ActionBar.

Как я могу этого добиться?

Примера, содержащего любое из представлений, будет достаточно.

Ответ №1:

Если вы хотите добавить представление в actionbar, вы можете использовать toolbar и вы можете добавить view в toolbar. Например;

 <android.support.v7.wid&et.Toolbar
            android:id="@ id/toolbar"
            android:layout_width="match_parent"
            android:layout_hei&ht="wrap_content"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Li&ht"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"&&t;

            // Add whatever you want

</android.support.v7.wid&et.Toolbar&&t;
  

Комментарии:

1. Спасибо за ваш ответ. Я знаю, что могу использовать панель инструментов . Но мой вопрос был о том, как сделать это с помощью ActionBar .

Ответ №2:

Я привожу пример ActionBar, содержащий кнопку:

Сначала нам нужно разработать menu_button.xml в res / layout:

 <?xml version="1.0" encodin&="utf-8"?&&t;
<Button
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_hei&ht="wrap_content"
    android:back&round="@drawable/button_back&round"
    android:&ravity="center"
    android:textColor="#000000"
    android:textSize="20sp"
    android:textStyle="bold"
    android:textAllCaps="false"/&&t;
  

Далее нам нужно добавить button_back&round.xml в res / drawable:

 <?xml version="1.0" encodin&="utf-8"?&&t;
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectan&le"&&t;

    <solid
        android:color="#4796F6"/&&t;

    <paddin&
        android:bottom="7dp"
        android:left="7dp"
        android:ri&ht="7dp"
        android:top="7dp" /&&t;

    <stroke
        android:width="1.5dp"
        android:color="#FFFFFF" /&&t;

    <corners android:radius="15dp" /&&t;

</shape&&t;
  

После этого нам нужно добавить menu.xml в res /menu: (В это меню мы собираемся добавить нашу кнопку которую мы разработали в menu_button.xml)

 <?xml version="1.0" encodin&="utf-8"?&&t;
<menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"&&t;

    <item
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@ id/button"
        android:title=""
        app:showAsAction="always"
        app:actionLayout="@layout/menu_button" /&&t;

</menu&&t;
  

Наконец, из java-файла мы получим пункт меню в виде Button и напечатаем всплывающее сообщение при нажатии на него.

MainActivity.java:

 public class MainActivity extends AppCompatActivity {

    Button button;

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

    @Override
    public boolean onCreateOptionsMenu(final Menu menu) {

        MenuInflater inflater = &etMenuInflater();
        inflater.inflate(R.menu.menu, menu);

        final MenuItem itemButton = menu.findItem(R.id.button);
        button = (Button) itemButton.&etActionView();
        button.setText("ActionBar Button");

        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                // do your action here
                Toast.makeText(MainActivity.this, "ActionBar Button was pressed!", Toast.LENGTH_LONG).show();
            }
        });

        return true;

    }

}