与微调器不同,下拉列表应具有固定的预定义名称。当它的元素被点击时,他们应该传递一个 Intent 去他们相应的活动。希望有好的代码。谢谢你。
问问题
504 次
2 回答
0
我将在此处发布基础知识,但您可以在我们的 github 存储库 ( https://github.com/todoroo/astrid ) 中找到更多详细信息。基本思想是按照 hanry 的建议扩展 GreenDroid 的 QuickActionWidget。子类看起来像:
public class MenuPopover extends QuickActionWidget {
protected DisplayMetrics metrics;
protected LinearLayout content;
public MenuPopover(Context context) {
super(context);
setContentView(R.layout.my_layout);
content = (LinearLayout) getContentView().findViewById(R.id.content);
metrics = context.getResources().getDisplayMetrics();
setFocusable(true);
setTouchable(true);
}
@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);
}
}
布局文件 my_layout.xml 非常简单:
<LinearLayout
android:id="@+id/content"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/gdi_arrow_up"
android:orientation="vertical"/>
<ImageView
android:id="@+id/gdi_arrow_up"
android:layout_width="27dip"
android:layout_height="27dip"
android:layout_marginLeft="-10dip"
android:scaleType="fitCenter"
android:layout_marginBottom="-8dip"
android:src="?attr/asListArrowUp" />
<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"/>
</RelativeLayout>
然后,您只需向 popover 类添加一个简单的辅助方法,即可将视图(即行,带有可选侦听器)添加到 popover 的主体:
public void addViewToContent(View v, OnClickListener listener) {
content.addView(v);
if (listener != null) {
v.setOnClickListener(listener);
}
}
创建弹出窗口的实例后,您可以通过调用来显示它
menuPopover.show(anchorView);
这是一个稍微简化的版本——在实践中,我们将一些附加信息、侦听器等附加到这些视图中,以使它们在单击时实际执行操作。如果你愿意,你可以在https://github.com/todoroo/astrid查看完整的代码——类是 com.todoroo.astrid.ui.MainMenuPopover。
于 2013-02-07T07:30:07.643 回答
0
为什么您希望它与 Spinner 不同?您可以将微调器设置为在选择项目时启动活动。
playlistsSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int pos, long arg3) {
Intent intent = new Intent(this, yourOtherActivity.class);
intent.putExtra("extra-pos", pos);
//or, if you want different activites then:
Intent newActivity;
switch (pos) {
case 0:
newActivity = new Intent(this, activityB.class);
break;
case 1:
newActivity = new Intent(this, activityC.class);
break;
default:
//do nothing
break;
}
if (newActivity != null) {
startActivity(newActivity);
}
}
您还可以根据自己的喜好自定义微调器的外观。
于 2013-02-07T07:25:36.963 回答