mirror of https://github.com/tasks/tasks
Popover list selection menu
parent
75ad7c4e78
commit
c014cccc2c
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
Binary file not shown.
After Width: | Height: | Size: 147 B |
@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/lists_nav"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
style="@style/TextAppearance.GEN_EditLabel"
|
||||||
|
android:textSize="20dip"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
android:id="@android:id/list"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/gdi_arrow_up"
|
||||||
|
android:gravity="center"
|
||||||
|
android:background="@drawable/list_popover_bg"
|
||||||
|
android:fadingEdgeLength="0dp"/>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/gdi_arrow_up"
|
||||||
|
android:layout_width="27dip"
|
||||||
|
android:layout_height="27dip"
|
||||||
|
android:scaleType="fitCenter"
|
||||||
|
android:layout_marginBottom="-8dip"
|
||||||
|
android:src="@drawable/list_arrow_up" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/gdi_arrow_down"
|
||||||
|
android:layout_width="27dip"
|
||||||
|
android:layout_height="27dip"
|
||||||
|
android:scaleType="fitCenter"
|
||||||
|
android:layout_marginBottom="-8dip"
|
||||||
|
android:layout_below="@android:id/list"
|
||||||
|
android:src="@drawable/list_arrow_down" />
|
||||||
|
|
||||||
|
</RelativeLayout>
|
@ -0,0 +1,61 @@
|
|||||||
|
package com.todoroo.astrid.ui;
|
||||||
|
|
||||||
|
import greendroid.widget.QuickAction;
|
||||||
|
import greendroid.widget.QuickActionWidget;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import android.R;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.graphics.Rect;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.View.MeasureSpec;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.AdapterView.OnItemClickListener;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
|
import android.widget.ListAdapter;
|
||||||
|
import android.widget.ListView;
|
||||||
|
|
||||||
|
|
||||||
|
public class ListDropdownPopover extends QuickActionWidget {
|
||||||
|
|
||||||
|
private final ListView listView;
|
||||||
|
|
||||||
|
public ListDropdownPopover(Context context, int layout) {
|
||||||
|
super(context);
|
||||||
|
setContentView(layout);
|
||||||
|
|
||||||
|
listView = (ListView) getContentView().findViewById(R.id.list);
|
||||||
|
|
||||||
|
setFocusable(true);
|
||||||
|
setTouchable(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAdapter(ListAdapter adapter, OnItemClickListener listener) {
|
||||||
|
listView.setAdapter(adapter);
|
||||||
|
listView.setOnItemClickListener(listener);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void populateQuickActions(List<QuickAction> quickActions) {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onMeasureAndLayout(Rect anchorRect, View contentView) {
|
||||||
|
contentView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
|
||||||
|
contentView.measure(MeasureSpec.makeMeasureSpec(getScreenWidth(), MeasureSpec.EXACTLY),
|
||||||
|
ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||||
|
|
||||||
|
int rootHeight = contentView.getMeasuredHeight();
|
||||||
|
|
||||||
|
int offsetY = getArrowOffsetY();
|
||||||
|
int dyTop = anchorRect.top;
|
||||||
|
int dyBottom = getScreenHeight() - anchorRect.bottom;
|
||||||
|
|
||||||
|
boolean onTop = (dyTop > dyBottom);
|
||||||
|
int popupY = (onTop) ? anchorRect.top - rootHeight + offsetY : anchorRect.bottom - offsetY;
|
||||||
|
|
||||||
|
setWidgetSpecs(popupY, onTop);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue