我想实现一个复杂效果的弹出菜单,其中一个是支持滚动。看来PopupMenu和AlertDialog无法满足我的需求。所以我用ScrollView尝试了PopupWindow。
首先,我准备了一个布局,它有一个简单的结构,就像ApiDemo所示:
ScrollView
LinearLayout with Vertical attribute
TextView
TextView
TextView
...
其次,我创建了一个具有此布局和200width / 300height的PopupWindow,并在showAtLocation()的某个位置显示它。
我可以显示滚动条并具有滚动效果,但LinearLayout中的TextViews不会滚动(它们处于固定位置)!
出了点问题,但我没有意义。 (Android3.0的)
感谢任何能给我一些提示的热心人。
-_- !!
答案 0 :(得分:2)
我也遇到过类似的问题。有些如何在scrollview窗口中包装相对布局不适用于popupwindow。
我尝试在scrollview下包装各个视图,它对我有用。请看下面的内容。希望这有帮助
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:background="#eebd9c"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
>
<ScrollView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_below="@+id/textView2" >
<TextView
android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:ems="15"
android:gravity="fill_horizontal"
android:minLines="6"
android:scrollbars="vertical"
android:singleLine="false"
android:text="Multiline text"
android:textAppearance="?android:attr/textAppearanceSmall" />
</ScrollView></RelativeLayout>
答案 1 :(得分:0)
我认为您的要求可以通过Dialog尝试我给出的代码来实现
protected void showInputDialog() {
final Dialog splRerDialog = new Dialog(getContext());
splRerDialog.setTitle("Special request.");
ScrollView scroll = new ScrollView(getContext());
LinearLayout lin = new LinearLayout(getContext());
lin.setLayoutParams( new LayoutParams(350,200));
lin.setGravity(Gravity.CENTER);
lin.setOrientation(LinearLayout.VERTICAL);
final EditText req = new EditText(getContext());
req.setLayoutParams( new LayoutParams(300,300));
lin.addView(req);
Button btn = new Button(getContext());
btn.setText("Ok");
btn.setLayoutParams( new LayoutParams(200,LayoutParams.WRAP_CONTENT));
btn.setGravity(Gravity.CENTER);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
splRerDialog.dismiss();
}
});
lin.addView(btn);
scroll.addView(lin);
splRerDialog.addContentView(scroll, new LayoutParams(LayoutParams.WRAP_CONTENT,200));
splRerDialog.show();
}