2016-07-20 16 views
11

Uwaga: To nie jest wyskakujące menu popup. Dlatego proszę o przeczytanie uważnie.Ustawienie menu kontekstowego na pełny ekran

Zaimplementowałem menu pop. Wyświetla się na połowie ekranu. Chcę rozłożyć to na całą szerokość urządzenia. Próbowałem zmienić jego styl, ustawiając layout_width jako match_parent, ale bez powodzenia.

Poniżej jest, co starałem dotąd:

Style

<!-- Base application theme. --> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 

     <item name="popupMenuStyle">@style/PopupMenu</item> 
    </style> 

    <!-- Change Overflow Menu Background --> 
    <style name="PopupMenu" parent="android:Widget.Holo.Light.ListPopupWindow"> 
     <item name="android:popupBackground">#888888</item> 
     <item name="android:layout_width">match_parent</item> 
    </style> 

Poniżej jest kod Java:

PopupMenu menu = new PopupMenu(getActivity(), tvnext); 


    for (int i = 0; i < array.size(); i++) { 

     menu.getMenu().add(1, i, 1, array.get(i).getAccountName()); 

    } 


    menu.show(); 

    menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
     @Override 
     public boolean onMenuItemClick(MenuItem item) { 
      setUpNextFunctionality(item.getItemId()); 


      return false; 
     } 
    }); 

P.S: Proszę nie sugerować mi korzystać okienko. To jest moja ostatnia opcja, jeśli nic nie działa.

+0

znajdziesz odpowiedzi z poniższego linku http://stackoverflow.com/questions/24466869/android-popup -window-full-screen –

+0

spróbuj przeczytać moje pytanie. To nie jest menu podręczne menu. Na końcu pytania szczególnie wspomniałem notatkę. – theLazyFinder

+0

Ładne pytanie ...... Według mnie to nie jest możliwe .... Próbuje w moim projekcie, jak chcesz, ale nie może odnieść sukcesu ..... Jestem sprawdzić więcej na twoje pytanie ....... jeśli odniosłeś sukces, to podaj mi odpowiedź, która była dla mnie interesująca ... jeśli ktokolwiek odpowie na to zgodnie z twoim wymaganiem, to doceniam ..... –

Odpowiedz

1

Trythis:

pwindow = 
    new PopupWindow(layoutt,LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,true); 
+0

spróbuj przeczytać moje pytanie. To nie jest menu podręczne menu. Na końcu pytania szczególnie wspomniałem notatkę. – theLazyFinder

0

spróbować,

inflater.inflate (R.layout.menu, menu);

lub

menu.inflate (R.layout.popup_menu);

+0

Witamy w SO Ravina. Ale niestety jest to używane do nadmuchiwania menu (z R.menu). więc to nie pomoże nam ustawić niestandardowego układu. – theLazyFinder

2

Nie sądzę, że można to zrobić bez implementacji własnego okna wyskakującego podobnego do PopupMenu. Jeśli będzie sprawdzić MenuPopupHelper::createPopup:

@NonNull 
private MenuPopup createPopup() { 
    final WindowManager windowManager = (WindowManager) mContext.getSystemService(
      Context.WINDOW_SERVICE); 
    final Display display = windowManager.getDefaultDisplay(); 
    final Point displaySize = new Point(); 

    if (Build.VERSION.SDK_INT >= 17) { 
     display.getRealSize(displaySize); 
    } else if (Build.VERSION.SDK_INT >= 13) { 
     display.getSize(displaySize); 
    } else { 
     displaySize.set(display.getWidth(), display.getHeight()); 
    } 

    final int smallestWidth = Math.min(displaySize.x, displaySize.y); 
    final int minSmallestWidthCascading = mContext.getResources().getDimensionPixelSize(
      R.dimen.abc_cascading_menus_min_smallest_width); 
    final boolean enableCascadingSubmenus = smallestWidth >= minSmallestWidthCascading; 

    final MenuPopup popup; 
    if (enableCascadingSubmenus) { 
     popup = new CascadingMenuPopup(mContext, mAnchorView, mPopupStyleAttr, 
       mPopupStyleRes, mOverflowOnly); 
    } else { 
     popup = new StandardMenuPopup(mContext, mMenu, mAnchorView, mPopupStyleAttr, 
       mPopupStyleRes, mOverflowOnly); 
    } 

    // Assign immutable properties. 
    popup.addMenu(mMenu); 
    popup.setOnDismissListener(mInternalOnDismissListener); 

    // Assign mutable properties. These may be reassigned later. 
    popup.setAnchorView(mAnchorView); 
    popup.setCallback(mPresenterCallback); 
    popup.setForceShowIcon(mForceShowIcon); 
    popup.setGravity(mDropDownGravity); 

    return popup; 
} 

widać, że rozmiar PopupMenu rodzaju ustalony zgodnie z rozmiarem wyświetlacza. Najprawdopodobniej łatwym sposobem jest sprawdzenie kodu źródłowego związanego z PopupMenu i zaimplementowanie czegoś podobnego, ale o rozmiarach, które chciałbyś mieć.

+0

Jak korzystać z tego ... – theLazyFinder

+0

@tpA Aby użyć czego? – Divers

+0

Jak korzystać z tej metody w mojej klasie fragmentów. Kiedyś kopiowałem w mojej klasie, ale nie mogłem zaimportować MenuPopup. Czy jest wbudowana klasa – theLazyFinder

1

Spróbuj ustawić MinWidth w swoim stylu jak poniżej

 <item name="android:minWidth">1000dp</item> 
+0

nie działa ..... – theLazyFinder

5

mam pytanie. Zamiast modyfikować coś skorzystaj z nowego widżetu, który z łatwością spełni Twoje wymagania i będzie kompatybilny z nowszą wersją.

Google wprowadzi nową koncepcję materiału co Bottom-Sheet

Aby użyć go w Androida można korzystać z bibliotek piasty git jak this.

0

Przeźroczysty. Zrobiłem to samo dla pop-upa w ten sposób. Sprawdź ten. Może być to również dla ciebie.

W swoim manifeście:

<activity 
      android:name=".ActivityInviteFriend" 
      android:theme="@style/Theme.TransparentInfo"> 

     </activity> 

W stylu: główny motyw:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/LightappActionBarColor</item> 
     <item name="colorPrimaryDark">@color/appColor</item> 
     <item name="colorAccent">@color/btn_color</item> 
     <item name="windowNoTitle">true</item> 
     <item name="windowActionBar">false</item> 
    </style> 

i niestandardowy motyw:

<color name="semiTransparentBlack">#00000000</color> 

    <style name="Theme.TransparentInfo" parent="AppTheme"> 
     <item name="android:windowIsTranslucent">true</item> 
     <item name="android:windowBackground">@color/semiTransparentBlack</item> 
     <item name="android:windowContentOverlay">@null</item> 
     <item name="android:windowNoTitle">true</item> 
     <item name="android:windowIsFloating">false</item> 
     <item name="android:backgroundDimEnabled">true</item> 
    </style> 

Twój aktywny:

package com.gc.naifizzy; 

import android.graphics.drawable.ColorDrawable; 
import android.os.Bundle; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.view.Window; 
import android.widget.Button; 
import android.widget.Toast; 

public class ActivityInviteFriend extends AppCompatActivity { 
    Button btn_send; 
    Snackbar snackbar; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setBackgroundDrawable(
       new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
     setContentView(R.layout.activity_invite_friend); 
     btn_send = (Button) findViewById(R.id.btn_send); 
     btn_send.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       //snack("Invitation sent successfully..."); 
       Toast.makeText(ActivityInviteFriend.this, "Invitation sent successfully", Toast.LENGTH_SHORT).show(); 
       finish(); 
      } 
     }); 
    } 

    public void snack(String data) { 
     snackbar = Snackbar 
       .make(findViewById(android.R.id.content), data, Snackbar.LENGTH_LONG) 
       .setAction("Dismiss", new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
         snackbar.dismiss(); 
        } 
       }); 

     snackbar.show(); 

    } 
} 

i wreszcie Twój układ xml:

<?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:background="#502f2f2f"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="300dp" 
     android:layout_centerInParent="true" 
     android:background="@android:color/white" 
     android:paddingLeft="5dp" 
     android:paddingRight="5dp"> 

     <RelativeLayout 
      android:id="@+id/dds" 
      android:layout_width="match_parent" 
      android:layout_height="45dp" 
      android:background="#112f2f2f" 
      android:paddingTop="10dp" 
      android:visibility="visible"> 


      <TextView 
       android:id="@+id/txt_what" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_centerVertical="true" 
       android:gravity="center_vertical|left" 
       android:paddingLeft="10dp" 
       android:text="Invite people to join your tree on Naifizzy" 
       android:textColor="@color/appColor" 
       android:textSize="15sp" 
       android:textStyle="bold" /> 

     </RelativeLayout> 

     <View 
      android:id="@+id/view" 
      android:layout_width="match_parent" 
      android:layout_height="3dp" 
      android:layout_below="@id/dds" 
      android:layout_marginTop="3dp" 
      android:alpha="0.5" 
      android:background="@color/appColor" 
      android:visibility="visible" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/view" 
      android:layout_marginTop="20dp" 
      android:gravity="center_vertical|center_horizontal" 
      android:orientation="vertical"> 

      <TextView 
       android:id="@+id/txt_share" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_centerVertical="true" 
       android:layout_marginLeft="10dp" 
       android:text="Invite people by sharing this link " 
       android:textColor="#992f2f2f" 
       android:textSize="15sp" /> 

      <EditText 
       android:id="@+id/edt_user_link" 
       android:layout_width="match_parent" 
       android:layout_height="50dp" 
       android:layout_below="@id/txt_share" 
       android:layout_marginLeft="10dp" 
       android:layout_marginRight="10dp" 
       android:layout_marginTop="10dp" 
       android:background="@drawable/layout_border" 
       android:editable="false" 
       android:paddingLeft="10dp" 
       android:singleLine="true" 
       android:text="http://naifizzy.com/@parik_dhakan" 
       android:textColor="#992f2f2f" 
       android:textSize="15sp" /> 

      <View 
       android:id="@+id/view1" 
       android:layout_width="match_parent" 
       android:layout_height="1dp" 
       android:layout_below="@id/edt_user_link" 
       android:layout_marginBottom="20dp" 
       android:layout_marginTop="20dp" 
       android:alpha="0.5" 
       android:background="@color/appColor" /> 

      <TextView 
       android:id="@+id/txt_share2" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@id/view1" 
       android:layout_centerVertical="true" 
       android:layout_marginLeft="10dp" 
       android:text="Send by email " 
       android:textColor="#992f2f2f" 
       android:textSize="15sp" /> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="50dp" 
       android:layout_marginBottom="30dp" 
       android:layout_marginTop="10dp" 
       android:orientation="horizontal" 
       android:visibility="visible" 
       android:weightSum="1"> 

       <LinearLayout 
        android:id="@+id/ed_l" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_weight="0.2" 
        android:background="@drawable/layout_border" 
        android:orientation="horizontal" 
        android:visibility="visible"> 

        <RelativeLayout 
         android:layout_width="match_parent" 
         android:layout_height="match_parent"> 


         <android.support.design.widget.TextInputLayout 
          android:id="@+id/edl_current" 
          android:layout_width="match_parent" 
          android:layout_height="match_parent" 
          android:layout_centerInParent="true" 

          android:paddingTop="5dp" 
          android:textColorHint="#992f2f2f" 
          android:textSize="15sp"> 

          <EditText 
           android:id="@+id/edt_mail" 
           style="@style/StyledTilEditText" 
           android:layout_width="match_parent" 
           android:layout_height="match_parent" 
           android:layout_centerHorizontal="true" 
           android:background="@android:color/transparent" 
           android:hint="Enter recipients' Email seprated by commas " 
           android:inputType="textEmailAddress" 
           android:paddingLeft="10dp" 
           android:textColor="#992f2f2f" 
           android:textColorHint="#992f2f2f" 

           android:textSize="15sp" /> 
         </android.support.design.widget.TextInputLayout> 

         <ImageView 
          android:id="@+id/img_show" 
          android:layout_width="30dp" 
          android:layout_height="25dp" 
          android:layout_alignParentEnd="true" 
          android:layout_centerVertical="true" 
          android:layout_marginEnd="20dp" 
          android:scaleType="centerInside" 
          android:src="@drawable/ic_eye" 
          android:visibility="gone" /> 
        </RelativeLayout> 
       </LinearLayout> 

       <EditText 
        android:id="@+id/edt_user_link2" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_below="@id/txt_share2" 
        android:layout_marginLeft="10dp" 
        android:layout_marginRight="10dp" 
        android:background="@drawable/layout_border" 

        android:paddingLeft="10dp" 
        android:singleLine="true" 
        android:text="http://naifizzy.com/@parik_dhakan" 
        android:textColor="#992f2f2f" 
        android:textSize="15sp" 
        android:visibility="gone" /> 

       <Button 
        android:id="@+id/btn_send" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_marginRight="5dp" 
        android:layout_weight="0.8" 
        android:background="@drawable/signupbg" 
        android:gravity="center_vertical|center_horizontal" 
        android:text="Send\nInvites" 
        android:textColor="@android:color/white" 
        android:textSize="10sp" /> 
      </LinearLayout> 


     </LinearLayout> 
    </RelativeLayout> 


</RelativeLayout> 
+0

Twoje podejście jest w pewnym stopniu słuszne. Ale Tworzenie innej aktywności w oddzielnym cyklu życia i dla mojej sytuacji chcę, aby to okno wyskakujące w innym wątku. – theLazyFinder