5

Я пытаюсь добавить действие share на свою панель инструментов. Панель должна быть оранжевым (или прозрачным, как в данном случае) с белым текстом и иконками, поэтому я использую эту точку зрения, как Toolbar:Панель инструментов ShareActionProvider тема всегда темная

<android.support.v7.widget.Toolbar 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:id="@+id/toolbar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:minHeight="?attr/actionBarSize" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
    tools:ignore="UnusedAttribute" /> 

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

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

Независимо от того, как изменить стиль это то, что я получаю:

enter image description here

Как убедить ShareActionProvider получить Light тему?

+0

Я думаю, что поможет вам http://stackoverflow.com/questions/28591447/style-appcompat-v7- toolbar-menu-background – mustafasevgi

+1

Это не работает –

+0

Вы можете попробовать приложение: theme = "@ style/ThemeOverlay.AppCompat.Light", но при этом будет стрелка вверх и значок меню темнее. – Harry

ответ

3

мое решение основано на библиотеке поддержки v7, Toolbar, ActionBarActivity, Android Студия

1- удалить app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

2- убедитесь, что базовая тема Theme.AppCompat.Light.NoActionBar

3- перейти к исходному коду от ShareActionProvider, набрав «ShareActionProvider» в любом месте вашего кода, затем импортируйте v7, затем наведите на него мышь (ctrl + левый клик)

4- скопируйте код в него d вставить его в новый файл Java в проекте, в каталоге вы

5- окажитесь в ShareActionProvider и удалить этот импорт, если он у вас import android.support.v7.appcompat.R

6- предоставить собственный значок доступа, так как по умолчанию один черный Drawable myDrawable = mContext.getResources().getDrawable(R.drawable.ic_share); activityChooserView.setExpandActivityOverflowButtonDrawable(myDrawable);

7- перейти к вашей деятельности и удалить импорт вы сделали на шаге 3 (использовать свой собственный файл)

8- пойти к вашему onCreateOptionsMenu это должно быть так:

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    getMenuInflater().inflate(R.menu.menu_main, menu); 

    MenuItem item = menu.findItem(R.id.menu_item_share); 

    mShareActionProvider = new ShareActionProvider(MainActivity.this); 
    MenuItemCompat.setActionProvider(item , mShareActionProvider); 

    Intent shareIntent = new Intent(); 
    shareIntent.setAction(Intent.ACTION_SEND); 
    shareIntent.putExtra(Intent.EXTRA_TEXT, "Hello World"); 
    shareIntent.setType("text/plain"); 
    mShareActionProvider.setShareIntent(shareIntent); 

    return true; 
} 

9- последний шаг не забудьте редактировать свои menu.xml

app:actionProviderClass= 
      "com.yourPackageName.ShareActionProvider" /> 
+0

Это не сработает. класс зависит от некоторых других классов в android, которые не являются общедоступными –

1

Это то, что я сделал, и это сработало. я хотел белый фона в ShareActionProvider с ним текстом быть черным

<android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:theme="@style/MainTheme" 
      app:layout_collapseMode="pin"/> 

Моей тему

<style name="MainTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimary">@color/md_white_1000</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="android:textColorPrimary">#ffffff</item> 
    <item name="android:textColorSecondary">#ffffff</item> 
    <item name="android:textColor">@color/md_black_1000</item> 
    <item name="listPopupWindowStyle">@style/PopupListStyle</item> 
</style> 

<style name="PopupListStyle" parent="@style/Widget.AppCompat.Light.ListPopupWindow"> 
    <item name="android:popupBackground">#ffffff</item> 
</style>