2013-04-26 4 views
0

Итак, у меня сложена проблема создания простой кнопки с выпадающим списком элементов. И я искал ответ, но не нашел его, поэтому решил его самостоятельно.Как создать раскрывающийся список ListView с кнопки?

выглядит так:

извините, я не могу размещать изображения, потому что я не хватает репутации.

так ниже, как могли мы можем это сделать, если нам это нужно, конечно :)

+7

Почему вы не используете прядильщик? – Analizer

+0

Я понятия не имею, что такое «простая» кнопка с «выпадающим списком элементов списка» может отличаться от Spinner, действительно ... –

+0

простая кнопка с выпадающим списком ... Amazing – Unknown

ответ

0

Таким образом, для нашей потребности, мы должны использовать ListPopupWindow. Ссылка на официальное описание:

http://developer.android.com/reference/android/widget/ListPopupWindow.html

Давайте погрузимся в коде:

у нас есть свой собственный метод:

public void downloadBtnSelected(View anchor) { 
      final ListPopupWindow lpw = new ListPopupWindow(this); 
      String[] data = { ".png", ".pdf", ".jpg", ".jpeg" }; 
      PopupAdapter pa = new PopupAdapter(data, this); 
      lpw.setAdapter(pa); 

      //setting up an anchor view 
      lpw.setAnchorView(anchor); 

      //Setting measure specifications. I'v used this mesure specs to display my 
      //ListView as wide as my anchor view is 
      lpw.setHeight(android.widget.LinearLayout.LayoutParams.WRAP_CONTENT); 
      lpw.setWidth(anchor.getRight() - anchor.getLeft()); 

      // Background is needed. You can use your own drawable or make a 9patch. 
      // I'v used a custom btn drawable. looks nice. 
      lpw.setBackgroundDrawable(this.getResources().getDrawable(
        android.R.drawable.btn_default)); 

      // Offset between anchor view and popupWindow 
      lpw.setVerticalOffset(3); 

      lpw.setOnItemClickListener(new OnItemClickListener() { 

       @Override 
       public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
         long arg3) { 
           /// Our action..... 
        lpw.dismiss(); 

       } 
      }); 
      lpw.show(); 

     } 

и кнопку с onClickListener к позвоните по этому методу:

Button btn = new Button(this); 
     btn.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       downloadBtnSelected(v); 

      } 
     }); 

мы передаем аргумент View v как наш якорь, чтобы наш PopupWindow знал, где отображать себя. Он будет отображаться в нижнем левом углу нашего анкерного представления, если есть достаточно места внизу. Если нет - он будет отображаться выше.

Смежные вопросы