2016-09-02 6 views
5

Androidポップアップメニューにスタイルを適用しようとしています。ボタンをクリックするとメニューが表示されます。私の例では、黒のメニューの背景を設定したいと思います。ポップアップメニューのスタイルを変更する - 動作しない

だから、私のメニューレイアウト:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:title="Item 1" 
     android:id="@+id/menu1"> 
    </item> 

    <item 
     android:title="Item 2" 
     android:id="@+id/menu2"> 
    </item> 

</menu> 

次に、私の活動のレイアウト:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    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" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.michal.popupmenu.MainActivity"> 

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

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Button" 
     android:id="@+id/button" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:onClick="btnClick" 
     android:nestedScrollingEnabled="true"/> 
</RelativeLayout> 

コードボタンのクリックでメニューを表示する:自動的に生成されたxmle

public class MainActivity extends AppCompatActivity 
{ 

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

    public void btnClick(View view) 
    { 
     showMenu(view); 

    } 


    public void showMenu(View v) 
    { 
     PopupMenu popup = new PopupMenu(this, v); 
     popup.inflate(R.menu.popup_menu); 
     popup.show(); 
    } 
} 

スタイル。私はここにある、黒のメニューの背景を設定するには、メニューのスタイルを追加しました:

<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu"> 
    <item name="android:popupBackground">@android:color/black</item> 

</style> 

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="popupMenuStyle">@style/PopupMenu</item> 
</style> 

しかし、まだメニューの背景は白であり、それは黒でなければなりません。どのようなアイデアが間違っている?

[編集] のコメントによると、更新されたコード:

<resources> 

    <style name="PopupMenu" parent="@style/Widget.AppCompat.Light.PopupMenu"> 
     <item name="android:popupBackground">#FF4081</item> 
    </style> 

    <!-- Base application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/colorPrimary</item> 
     <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
     <item name="colorAccent">@color/colorAccent</item> 
    </style> 



</resources> 

主な活動:

public void showMenu(View v) 
    { 
     Context wrapper = new ContextThemeWrapper(getApplicationContext(), R.style.PopupMenu); 
     PopupMenu popup = new PopupMenu(wrapper, v); 

     // This activity implements OnMenuItemClickListener 
     //popup.setOnMenuItemClickListener((PopupMenu.OnMenuItemClickListener) this); 
     popup.inflate(R.menu.popup_menu); 
     popup.show(); 
    } 

結果は、私が

result

メニューの背景がある期待するものではありませんまだ黒い、私がしたい色ではない設定する。

答えて

5

を:

カスタム描画可能に1.Created必要な色で次のように

popup_color_drawable.xml

<?xml version="1.0" encoding="utf-8"?> 
    <selector 
     xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true"> 
    <color 
     android:color="@color/colorPrimary"/> 
     </item> 
     <item> 
      <color 
       android:color="#655611"/> 
     </item> 
    </selector> 

追加は、選択効果に

2.In私styles.xmlを取得するためにをstate_pressed次のコードを追加:私はアプリのための私の基本テーマとしてTheme.AppCompat.Light.DarkActionBarを使用しています

<style name="MyPopupMenu" parent="Widget.AppCompat.PopupMenu"> 
    <item name="android:itemBackground">@drawable/popup_color_drawable</item> 
</style> 

を。以下の私の活動

public void showpopup(View view){ 
    Context wrapper = new ContextThemeWrapper(this, R.style.MyPopupMenu); 
    PopupMenu popup = new PopupMenu(wrapper, view); 
    popup.inflate(R.menu.popup_menu); 
    popup.show(); 
} 

3.Thenは、私は、このコードに、これはあなたを助け enter image description here

希望を使用して得た結果です。

あなたが行うために必要なすべての変化であった元の質問で
+0

このソウルとテキストの背景とテキストの色をどのように変更するのですか?色を透明に設定すると、透明でないテキストの背景が表示されます。 – user1209216

+0

** MyPopupMenu ** –

+0

の中で '#ff0000'という言葉でテキストの色を変えることはできますが、メニュー項目を選択するとメニュー項目の色が変更され、テキストの背景が変更されていないためです)。それにはどんな解決策がありますか? – user1209216

4

あなたはこの試してみてください:私はまた、上記の解決策を試してみましたが、私のポップアップメニューの色が変更されていないので、次のように私がやってしまった

public void showMenu(View v) 
    { 
     Context wrapper = new ContextThemeWrapper(getContext(), R.style.PopupMenu); 
     PopupMenu popup = new PopupMenu(wrapper, v); 
     popup.inflate(R.menu.popup_menu); 
     popup.show(); 
    } 
+1

私の場合は、getApplicationContext()、それが動作します。なぜXMLで直接スタイルを宣言できないのですか? – user1209216

+0

bczその膨らんだビュー..あなたは膨張したビューにスタイルを宣言できません。そのメニューのXMLファイルも表示されます。私はとても多くの時間をかけて失敗したので、私はこれとその仕事をしました。 –

+0

1つの編集...それは動作しません。メニューの背景は常に黒で、テキストは常に白です。私が設定した値ではありません。 – user1209216

2

<item name="android:popupBackground">#FF4081</item> 

へ:

<item name="android:itemBackground">@android:color/white</item> 
関連する問題