2016-05-27 4 views
2

Я в настоящее время делает приложение с задом поддержку панелей инструментов, и, таким образом, у меня есть этот файлКак программно добавить элементы на панель инструментов

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

Затем я программно добавить его к взглядам, делая что-то вроде:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 

Однако, я хочу, чтобы иметь возможность добавлять пользовательские представления в панель инструментов, таких как EditText и TextView без жесткого кодирования их в toolbar.xml выше.

Есть ли способ сделать это? Возможно, стоит отметить, что я использую библиотеку поддержки V7.

Спасибо, Лиам

+1

Вы всегда можете добавить их в XML и показать или скрыть их динамически. – cyroxis

ответ

4

Просто дать попробовать на следующий

Шаг 1: Добавьте LinearLayout на панель инструментов в XML-файле

<android.support.v7.widget.Toolbar xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/toolbar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    android:elevation="4dp" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 
    <LinearLayout 
      android:[email protected]+id/toolbar_item_container 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="horizontal" /> 
</android.support.v7.widget.Toolbar> 

Шаг 2: Получить эту LinearLayout в коде

Toolbar mToolbar = (Toolbar)findViewById(R.id.toolbar_transaction); 
LinearLayout layoutToolbar = (LinearLayout) 
        mToolbar.findViewById(R.id.toolbar_item_container); 

Шаг 3: Добавление и удаление вид этого LinearLayout используя следующий код

layoutToolbar.addView(); 
layoutToolbar.removeView(); 

Это может быть сделано без LinearLayout также путем непосредственного добавления и удаления элементов из Toolbar. Вы можете попробовать оба пути.

Надеюсь, это поможет.

+0

Спасибо! Я могу подтвердить это, как для прикрепления к макету, так и непосредственно к панели инструментов. Однако я могу только добавить добавления, построив их во время выполнения. Любая идея, как я надуть/прикрепить пользовательский вид XML на панель инструментов/макет? –

+0

Используя тот же способ, что и выше, используя метод addView. И раздуйте элемент, используя класс LayoutInflater. – ELITE

+3

Я использовал код: View v = getLayoutInflater(). Inflate (R.layout.homescreentoolbar, панель инструментов, ложь); toolbar.addView (v) ;, но текст представления, похоже, не отображается. :/ –

0

если вы не имеете панель инструментов в XML, можно установить пользовательский программно

actionBar.setCustomView(R.layout.custom_view); 
    View view = actionBar.getCustomView(); 
    TextView locationTitle = view.findViewById(R.id.tv_custom_toolbar); 
    locationTitle.setText("some text"); 
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
    actionBar.setDisplayHomeAsUpEnabled(true); 
Смежные вопросы