Hola, encontramos la solución a tu interrogante, has scroll y la verás un poco más abajo.
Solución:
Puede utilizar Reflection.
Spinner spinner = (Spinner) findViewById(R.id.spinner);
try
Field popup = Spinner.class.getDeclaredField("mPopup");
popup.setAccessible(true);
// Get private mPopup member variable and try cast to ListPopupWindow
android.widget.ListPopupWindow popupWindow = (android.widget.ListPopupWindow) popup.get(spinner);
// Set popupWindow height to 500px
popupWindow.setHeight(500);
catch (NoClassDefFoundError | ClassCastException | NoSuchFieldException | IllegalAccessException e)
// silently fail...
También puede afectar la ubicación y el tamaño de la vista desplegable subclasificando Spinner
y anulando su getWindowVisibleDisplayFrame(Rect outRect)
que es utilizado por android.widget.PopupWindow
para cálculos. Solo configúrelo outRect
para limitar el área donde se puede mostrar la vista desplegable.
Este enfoque, por supuesto, no es adecuado para todos los escenarios, ya que a veces desea colocar una vista desplegable para que no oscurezca otra vista o por alguna otra condición conocida solo “fuera de la instancia”.
En mi caso, necesitaba aplicar FLAG_LAYOUT_NO_LIMITS
marca a mi ventana de actividad que causó el outRect
ser enorme y, por lo tanto, parte de la vista desplegable a veces se oculta detrás de la barra de navegación. Para restaurar el comportamiento original, utilicé la siguiente anulación:
@Override
public void getWindowVisibleDisplayFrame(Rect outRect)
WindowManager wm = (WindowManager) getContext.getSystemService(Context.WINDOW_SERVICE);
Display d = wm.getDefaultDisplay();
d.getRectSize(outRect);
outRect.set(outRect.left, , outRect.right, outRect.bottom);
para eso he creado la mía propia, PopUpWindow como lo sugirió @theLittleNaruto, en la sección de comentarios.
main.xml
popup_example.xml
showpopup_1.java
package com.example.spinnerworking;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.PopupWindow.OnDismissListener;
import android.widget.Toast;
public class showpopup_1 extends Activity
boolean click = true ;
@Override
protected void onCreate(Bundle savedInstanceState)
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final LayoutInflater inflater = (LayoutInflater) this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final Button b = (Button) findViewById(R.id.btn);
final View pview = inflater.inflate(R.layout.popup_example,
(ViewGroup) findViewById(R.layout.main));
final PopupWindow pw = new PopupWindow(pview);
Log.i("hello", "hello") ;
b.setOnClickListener(new View.OnClickListener()
public void onClick(View v)
if (click)
// if onclick written here, it gives null pointer exception.
// if onclick is written here it gives runtime exception.
pw.showAtLocation(v, Gravity.CENTER_HORIZONTAL, 0, 0);
pw.update(8, 0, 150, 200);
String[] array = new String[] "tushar", "pandey",
"almora" ;
ListView lst = (ListView) pview.findViewById(R.id.lstview);
adapterHello adapter = new adapterHello(showpopup_1.this);
lst.setAdapter(adapter);
lst.setOnItemClickListener(new OnItemClickListener()
@Override
public void onItemClick(AdapterView> arg0, View arg1,
int arg2, long arg3)
Toast.makeText(showpopup_1.this, "pandey",
Toast.LENGTH_SHORT).show();
);
click = false ;
else
pw.dismiss();
click = true;
);
class adapterHello extends BaseAdapter
String array[] = new String[] "tushar", "pandey", "almora", "hello",
"tushar", "pandey", "almora", "hello", "tushar", "pandey",
"almora", "hello" ;
showpopup_1 context;
public adapterHello(showpopup_1 context)
this.context = context;
public int getCount()
// TODO Auto-generated method stub
return array.length;
@Override
public Object getItem(int arg0)
// TODO Auto-generated method stub
return arg0;
@Override
public long getItemId(int position)
// TODO Auto-generated method stub
return position;
@Override
public View getView(int position, View convertView, ViewGroup parent)
// TODO Auto-generated method stub
TextView text = new TextView(context);
text.setHeight(30);
text.setPadding(10, 8, 0, 0);
text.setTextColor(Color.BLACK);
text.setText(array[position]);
text.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
// TODO Auto-generated method stub
Log.i("clicked", "tushar");
);
return text;