在弹出窗口中定位滚动视图 window

Positioning a scrollview within a popup window

我正在处理我的第一个大型 android 项目,但我遇到了一个问题。 我必须显示一个带有条款和条件文本的弹出窗口window。由于其大小,文本必须滚动。我的具体问题是,出于视觉原因,我希望顶部位于屏幕下方,但我做任何事情都不会使其从顶部移动。

xml是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:padding="10dip"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    
    <ScrollView
        android:id="@+id/tc_scroll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/tv_long"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="A very long string of text"></TextView>

        </LinearLayout>
    </ScrollView>
</LinearLayout>

我试过添加:

tools:layout_editor_absoluteY="100dp" />

android:layout_marginTop="100dip"

在不同的地方——scrollview 本身、父 LinearLayout 等但没有任何效果。

我已经转到放置 window 的代码并尝试在 ScrollView class 中使用 scrollTo 方法,如下所示:

 View tcView = inflater.inflate(R.layout.t_and_c_dialog, null);
        ScrollView tcScroll = (ScrollView) tcView.findViewById(R.id.tc_scroll);
        tcScroll.scrollTo(0, 200);
        PopupWindow pwTC = new PopupWindow(tcView, width, width, true);
        pwTC.showAtLocation(new LinearLayout(this), Gravity.CENTER, 0, 0);

还是不开心。有人有什么想法吗? 非常感谢 托尼·雷诺兹

我继续尝试各种事情并提出了以下建议,我并不完全理解,但可以务实地工作。 首先,使用以下代码弹出弹出窗口:

View tcView = inflater.inflate(R.layout.t_and_c_dialog, null);
PopupWindow pwTC = new PopupWindow(tcView, width, width, true);
pwTC.showAtLocation(new LinearLayout(this), Gravity.NO_GRAVITY, 0, 800);

这会将 window 放置在固定的 y 坐标上。

xml现在是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:padding="10dip"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ScrollView
        android:id="@+id/tc_scroll"
        android:layout_width="match_parent"
        android:layout_height="400dp"
        android:scrollbars="none" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/tv_long"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"

                android:text="A very long string of text"></TextView>
        </LinearLayout>
</ScrollView>

</LinearLayout>

因此设置硬连线 window 深度。这工作正常,如下所示。

它只能为给定的模拟器提供正确的外观,所以我必须找出如何以编程方式设置大小。

我有义务对这里到底发生了什么发表任何评论,and/or 改进提示